CSUST 1503 ZZ买衣服

解题报告:题目大意是输入两个数N和M,N表示一开始输入N个字符串,并且保存起来,然后再输入M个字符串,并且在输入M个字符串的同时要求判断每次输入的字符串是否已经存在,要注意的是后面输入的M个字符串每次输入之后如果判断不存在的话,还要把输入的这个字符串保存起来。

第一个用STL  map容器过的题,纪念一下。看到这题之后,也许很多人都会想到用字典树,但我试过了 ,这题的输入的数据量比较大,如果用字典树就会超内存,于是这题又被我搁置了很久,直到我学了STL ,才发现,如果这题用map容器就是一个水题。前面输入的N个字符串只要一次插入到容器中就行了,后面输入M个字符串时,没输入一次就判断一次,在map容器中是否已经存在这个字符串。另外这题有一个很重要的点就是不能用cin或cout输入或输出,刚开始用我就TLE了,后来改 一下,把输入改成scanf,结果还是TLE,但是后来cout改成printf之后就过 了,瞬间少用了几百毫秒的时间,越来越感觉cin和cout不是一般地慢了。

 1 #include<cstdio>
 2 #include<map>
 3 #include<string>
 4 using namespace std;
 5 int main() {
 6     int N,M;
 7     while(scanf("%d%d",&N,&M)!=EOF) {
 8         string name;
 9         char c[1000];
10         map<string,int> map1;
11         for(int i = 1;i<=N;++i) {
12             scanf("%s",c);
13             name = c;
14             map1.insert(pair<string,int> (name,i));
15         }
16         pair<map<string,int>::iterator,bool> iter;
17         for(int i = 1;i<=M;++i) {
18             scanf("%s",c);
19             name = c;
20             iter = map1.insert(pair<string,int> (name,N+i));
21             if(iter.second)
22             printf("YES\n");
23             else printf("NO\n");
24         }
25     }
26     return 0;
27 }
View Code

 

posted @ 2013-07-15 10:42  xiaxiaosheng  阅读(214)  评论(0编辑  收藏  举报