NYOJ 138找球号(二)

View Code
  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 //用数组存储也可以,但是空间要求太大了,还可以用位存储来做,不知道怎么弄,也得学习一下……。
原文地址:https://www.cnblogs.com/yaling/p/3000417.html