题目地址:http://ac.jobdu.com/problem.php pid=1349
每个测试案例包括两行:
第一行有1个整数n,表示数组的大小。1<=n <= 10^6。
第二行有n个整数,表示数组元素,每个元素均为int。
第三行有1个整数m,表示接下来有m次查询。1<=m<=10^3。
下面有m行,每行有一个整数k,表示要查询的数。
输出: 对应每个测试案例,有m行输出,每行1整数,表示数组中该数字出现的次数。81 2 3 3 3 3 4 513样例输出:
4
#includetypedef struct timesofdata{ int data; int times; }TimesOfData; int Bsearch (TimesOfData hash[], int start, int end, int k){ int mid; while (start <= end){ mid = (start + end) / 2; if (hash[mid].data < k) start = mid + 1; else if (hash[mid].data > k) end = mid - 1; else return hash[mid].times; } return 0; } int main(void){ int n; int input; TimesOfData hash[1000000]; int m; int k; int i; int j; int pre; int flag; while (scanf ("%d", &n) != EOF){ for (i=0, j=-1; i
#includeint Bsearch (int data[], int start, int end, int k){ int mid; while (start <= end){ mid = (start + end) / 2; if (data[mid] < k) start = mid + 1; else if (data[mid] > k) end = mid - 1; else return mid; } return -1; } int main(void){ int n; int input[1000000]; int m; int k; int i; int index; int num; while (scanf ("%d", &n) != EOF){ for (i=0; i = 0 && input[i--] == k) ++num; i = index + 1; while (i < n && input[i++] == k) ++num; printf ("%d\n", num); } } } return 0; }
本以为主要考的是哈希表才有了第一个程序,谁知却是考的二分查找,呵呵……