NYOJ 86

View Code
 1 #include<iostream>
2 #include<cstdio>
3 using namespace std;
4
5 int a[3400000]={0};
6 int main()
7 {
8 int m,n,i,t;
9 scanf("%d%d",&m,&n);
10 for(i=0;i<m;++i)
11 {
12 scanf("%d",&t);
13 a[t/32] |=(1<<(t%32));//一个int 表示32位
14 } //商相同,余数不同,
15 for(i=0;i<n;++i) //余数相同,商不同
16 {
17 scanf("%d",&t);
18 if(a[t/32]&(1<<(t%32)))
19 printf("YES\n");
20 else printf("NO\n");
21 }
22 system("pause");
23 return 0;
24 }


用hash超时:

View Code
 1 #include<iostream>
2 #include<cstdio>
3 using namespace std;
4
5 const int x=10000000;
6 struct node
7 {
8 int v;
9 node *next;
10 }temp[1000001];
11 node *table[x];
12 int k=0;
13
14 int main()
15 {
16 int m,n,i,t,h;
17 scanf("%d%d",&m,&n);
18 for(i=0,k=0;i<m;++i,++k)
19 {
20 scanf("%d",&temp[k].v);
21 h=temp[k].v%x;
22 node *p=table[h];
23 bool f=0;
24 while(p)
25 {
26 if(p->v==temp[k].v)
27 {
28 f=1;
29 break;
30 }
31 p=p->next;
32 }
33 if(!f)
34 {
35 temp[k].next=table[h];
36 table[h]=&temp[k];
37 }
38 }
39 for(i=0;i<n;++i)
40 {
41 scanf("%d",&t);
42 h=t%x;
43 node *p=table[h];
44 while(p)
45 {
46 if(p->v==t)break;
47 }
48 if(p)printf("YES\n");
49 else printf("NO\n");
50 }
51 system("pause");
52 return 0;
53 }

 

posted @ 2012-02-17 20:52  知行执行  阅读(147)  评论(0编辑  收藏  举报