二十世纪八十年代 | ||||||
| ||||||
Description | ||||||
计算机被发明是很早以前的事情了,不过早期的计算机并没有现在那么强大,要知道你现在拿来切水果的手机,其运算能力已经能当年把航天器送人太空的超级计算机想相媲美了。到了二十世纪八十年代,尽管计算机技术有了很大的进步,但是其计算能能力还是与今日的计算机无法相比。有一个公司要设计一个统计软件,这个统计软件要统计数百万人是否购买了一种特定类别的商品。在当时这是一个不小的挑战,公司手头最顶尖的机器只有几兆内存,而可以分配给这个软件的内存仅仅只有5兆而已。 作为一个精明的程序员,你需要最大限度的利用所学的知识来完成这个设计,而且由于计算机资源相当有限,你无法占用过多的计算机资源,哪怕是多一点的CPU资源与内存资源。要知道,经理还打算使用这台机器运行其它的程序! | ||||||
Input | ||||||
本题只有一组测试数据,第一行输入一个整数n表示购买特定产品的人数,接下来n行(n不超过2000000),每行一个字符串(长度不超过5)表示每个购买者的姓名。随后是一个整数m(m不超过2000000),表示我们要查询的次数,接下来m行是我们要查询的姓名。输入处理到文件结束。 | ||||||
Output | ||||||
对于每个查询,如果这个人购买了特定的商品,输出yes并换行,否则输出no并换行。 | ||||||
Sample Input | ||||||
3 abc def ooo 2 abc kkk
| ||||||
Sample Output | ||||||
yes no
| ||||||
Source | ||||||
2014 Winter Holiday Contest 4 | ||||||
Author | ||||||
杨和禹 |
关于bitset详细讲解:http://blog.youkuaiyun.com/qll125596718/article/details/6901935
关于本题学习bitset里边的两个基础操作:set&&test(建立和查询)
AC代码:
#include<stdio.h>
#include<string.h>
#include<bitset>
using namespace std;
bitset<26*26*26*26*26>bit;
char a[10];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s",a);
int tmp=0;int len=strlen(a);
for(int i=0;i<len;i++)
{
tmp=tmp*26+a[i]-'a';
}
bit.set(tmp);
}
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s",a);
int tmp=0;int len=strlen(a);
for(int i=0;i<len;i++)
{
tmp=tmp*26+a[i]-'a';
}
if(bit.test(tmp)==1)
{
printf("yes\n");
}
else printf("no\n");
}
}