纯是练习读题和字符串处理。题目写的公式和解释有点绕。多看两遍就好了。
字符串处理涉及两方面
第一个是istringstream,头文件#include<sstream>
可以读入一整行,再按照空格一个一个处理出来,存下来。比sscanf()好的地方是,无论中间有多少给个空格,都当一个处理。而sscanf()不能。
getline(cin,line);
istringstream stream(line);
while(stream>>str){
cout<<str<<endl;
}
第二个就是map,头文件#include<map>
详细讲解:http://blog.csdn.net/juiceda/article/details/7568342
map<string,int> x[21000]; // map[int][string]=int;
while(j<n){
getline(cin,line);
istringstream stream(line);
while(stream>>str){
x[j][str]=1;
}
p[j]=x[j].size();
j++;
} //一行一行做处理,更新j
可以迅速的查找后面n行里出现的字符串是否出现过。
这道题目,只是读入和判断有些难。【尝试过暴力,果断的TLE】。
同时要注意赋值问题。初始值一定要赋值对。