![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /*找球号(二) 2 3 时间限制:1000 ms | 内存限制:65535 KB 4 5 难度:5 6 7 描述 在某一国度里流行着一种游戏。游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,还有一个空箱子,现在有两种动作:一种是"ADD",表示向空箱子里放m(0<m<=100)个球,另一种是"QUERY”,表示说出M(0<M<=100)个随机整数ki(0<=ki<=100000100),分别判断编号为ki 的球是否在这个空箱子中(存在为"YES",否则为"NO"),先答出者为胜。现在有一个人想玩玩这个游戏,但他又很懒。他希望你能帮助他取得胜利。 8 输入第一行有一个整数n(0<n<=10000); 9 随后有n行; 10 每行可能出现如下的任意一种形式: 11 第一种: 12 一个字符串"ADD",接着是一个整数m,随后有m个i; 13 第二种: 14 一个字符串"QUERY”,接着是一个整数M,随后有M个ki; 15 16 输出输出每次询问的结果"YES"或"NO".样例输入2 17 ADD 5 34 343 54 6 2 18 QUERY 4 34 54 33 66样例输出YES 19 YES 20 NO 21 NO*/ 22 23 24 25 #include<iostream> 26 #include<cstdio> 27 #include<cstring> 28 using namespace std; 29 30 31 #define N 1000000 32 #define size 1000010 33 34 typedef struct node{ 35 int data; 36 struct node *next; 37 }hash,*Hash; 38 39 hash head[size]; 40 41 Hash search(hash head[size],int value) 42 { 43 int k = value % N; 44 Hash p = &head[k]; 45 while(p && p->data != value) 46 { 47 p = p->next; 48 } 49 return p; 50 } 51 52 void insert(hash head[size],int value) 53 { 54 Hash s; 55 int k = value % N; 56 if(!search(head,value)) 57 { 58 s = new node; 59 s->data = value; 60 s->next = NULL; 61 s->next = head[k].next; 62 head[k].next = s; 63 } 64 } 65 66 67 int main() 68 { 69 //freopen("in.txt","r",stdin); 70 int T,n,i,value; 71 char s[7]; 72 for(i=0; i<size; ++i) 73 { 74 head[i].next = NULL; 75 head[i].data = -1; 76 } 77 scanf("%d",&T); 78 while(T--) 79 { 80 cin>>s; 81 scanf("%d",&n); 82 for(i=0; i<n; ++i) 83 { 84 scanf("%d",&value); 85 if(s[0] == 'A') 86 { 87 insert(head,value); 88 } 89 else 90 { 91 if(search(head,value)) 92 cout<<"YES\n"; 93 else 94 cout<<"NO\n"; 95 } 96 } 97 } 98 return 0; 99 } 100 101 //用数组存储也可以,但是空间要求太大了,还可以用位存储来做,不知道怎么弄,也得学习一下……。