bestcoder#36 1002 哈希
bestcoder#36 1002 哈希
Gunner
Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 726 Accepted Submission(s):
326
Problem Description
Long long ago, there is a gunner whose name is Jack. He
likes to go hunting very much. One day he go to the grove. There are n
birds and n
trees. The i−th
bird stands on the top of the i−th
tree. The trees stand in straight line from left to the right. Every tree has
its height. Jack stands on the left side of the left most tree. When Jack shots
a bullet in height H to the right, the bird which stands in the tree with height
H
will falls.
Jack will shot many times, he wants to know how many birds fall during each shot.
a bullet can hit many birds, as long as they stand on the top of the tree with height of H .
Jack will shot many times, he wants to know how many birds fall during each shot.
a bullet can hit many birds, as long as they stand on the top of the tree with height of H .
Input
There are multiple test cases (about 5), every case
gives n,m
in the first line, n
indicates there are n
trees and n
birds, m
means Jack will shot m
times.
In the second line, there are n numbers h[1],h[2],h[3],…,h[n] which describes the height of the trees.
In the third line, there are m numbers q[1],q[2],q[3],…,q[m] which describes the height of the Jack’s shots.
Please process to the end of file.
[Technical Specification]
1≤n,m≤1000000(106)
1≤h[i],q[i]≤1000000000(109)
All inputs are integers.
In the second line, there are n numbers h[1],h[2],h[3],…,h[n] which describes the height of the trees.
In the third line, there are m numbers q[1],q[2],q[3],…,q[m] which describes the height of the Jack’s shots.
Please process to the end of file.
[Technical Specification]
1≤n,m≤1000000(106)
1≤h[i],q[i]≤1000000000(109)
All inputs are integers.
Output
For each q[i]
, output an integer in a single line indicates the number of birds Jack shot
down.
Sample Input
4 3
1 2 3 4
1
1
4
Sample Output
1
0
1
Hint
Huge input, fast IO is recommended.#include<iostream> #include<string> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<ctype.h> using namespace std; const int maxn=1000100; const int HM=1000100; int n,m; struct Hash { int date; int cnt; Hash *next; }; Hash H[maxn]; inline int read() { char c=getchar(); while(!isdigit(c)) c=getchar(); int f=c-'0'; while(isdigit(c=getchar())) f=f*10+c-'0'; return f; } int h(int x) { return x%HM; } void insert(Hash*H,int date) { int key=h(date); Hash *pre=&H[key],*p=pre->next; while(p!=NULL){ if(p->date==date){ p->cnt++; return; } pre=p; p=p->next; } p=(Hash*)malloc(sizeof(Hash)); pre->next=p; p->next=NULL; p->date=date; p->cnt=1; } void find_del_output(Hash*H,int date) { int key=h(date); Hash *pre=&H[key],*p=pre->next; while(p!=NULL){ if(p->date==date){ printf("%d\n",p->cnt); pre->next=p->next;///删掉结点 free(p); return; } pre=p; p=p->next; } puts("0"); } int main() { while(cin>>n>>m){ memset(H,0,sizeof(H)); while(n--){ int h=read(); insert(H,h); } while(m--){ int q=read(); find_del_output(H,q); } } return 0; }
没有AC不了的题,只有不努力的ACMER!