• NYOJ138 找球号(二)


     

    找球号(二)

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:5
     
    描述
    在某一国度里流行着一种游戏。游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,还有一个空箱子,现在有两种动作:一种是"ADD",表示向空箱子里放m(0<m<=100)个球,另一种是"QUERY”,表示说出M(0<M<=100)个随机整数ki(0<=ki<=100000100),分别判断编号为ki 的球是否在这个空箱子中(存在为"YES",否则为"NO"),先答出者为胜。现在有一个人想玩玩这个游戏,但他又很懒。他希望你能帮助他取得胜利。
     
    输入
    第一行有一个整数n(0<n<=10000);
    随后有n行;
    每行可能出现如下的任意一种形式:
    第一种:
    一个字符串"ADD",接着是一个整数m,随后有m个i;
    第二种:
    一个字符串"QUERY”,接着是一个整数M,随后有M个ki;

    输出
    输出每次询问的结果"YES"或"NO".
    样例输入
    2
    ADD 5 34 343 54 6 2
    QUERY 4 34 54 33 66
    样例输出
    YES
    YES
    NO
    NO

     1 //代码一:用邻接表存储--hash
     2 #include<stdio.h>
     3 #include<string.h>
     4 #include<malloc.h>
     5 #define Mod 10000
     6 struct Node
     7 {
     8     int num;
     9     struct Node *next;
    10 }node[10001];
    11 
    12 int main()
    13 {     
    14     int n,t,temp,i;
    15     char s[10];
    16     struct Node *t1;
    17     scanf("%d",&n);
    18     for(i=0;i<10001;++i)
    19     {
    20         node[i].num=i;
    21         node[i].next=NULL;
    22     }
    23     while(n--)
    24     {    
    25         scanf("%s",s);
    26         if(s[0]=='A')
    27         {
    28             scanf("%d",&t);
    29             for(i=0;i<t;++i)
    30             {
    31                 scanf("%d",&temp);
    32                 t1=(struct Node *)malloc(sizeof(struct Node));
    33                 t1->num=temp;
    34                 t1->next=node[temp%Mod].next;
    35                 node[temp%Mod].next=t1;
    36             }
    37         }
    38         else
    39         {
    40             scanf("%d",&t);
    41             for(i=0;i<t;++i)
    42             {
    43                 scanf("%d",&temp);
    44                 t1=node[temp%Mod].next;
    45                 if(t1==NULL)
    46                 {
    47                     printf("NO\n");
    48                     continue;
    49                 }
    50                 while(t1)
    51                 {
    52                     if(t1->num==temp)
    53                     {
    54                         printf("YES\n");
    55                         break;
    56                     }
    57                     t1=t1->next;    
    58                 }
    59                 if(t1==NULL)
    60                     printf("NO\n");
    61             }
    62         }    
    63     }
    64     return 0;
    65 }
    //代码二:利用二进制位 hash
    #include <iostream> #include <cstdio> using namespace std; int flag[3125001]; int main() { int n, t; scanf("%d", &n); char cmd[6]; while(n--) { scanf("%s", cmd); scanf("%d", &t); int temp; if(cmd[0] == 'A') { while(t--) { scanf("%d", &temp); flag[temp / 32] |= 1 << (temp % 32); } } else { while(t--) { scanf("%d", &temp); if(flag[temp / 32] & 1 << (temp % 32)) printf("YES\n"); else printf("NO\n"); } } } return 0; }

      

    功不成,身已退
  • 相关阅读:
    loads和dumps的用法
    python实现装饰器
    pycharm 配置 git 方法
    正则表达式——练习一
    fiddler下载安装
    robotframework引入seleniumlibrary报错
    Codeforces-936B Sleepy Game
    Codeforces-940D. Alena And The Heater
    Codeforces-935D. Fafa and Ancient Alphabet
    Java编程规范
  • 原文地址:https://www.cnblogs.com/dongsheng/p/2559629.html
Copyright © 2020-2023  润新知