Accept: 372Submit: 1225
Time Limit: 1000 mSecMemory Limit : 32768 KB
Problem Description
Mr. Right有一个奇怪的嗜好,就是看见一个单词就有找它所有的变位词的冲动。一个单词的变位词就是该单词所有字母的一个排列。
Input
输入数据第一行为一个整数n,1<=n<=10^5,之后n行每行只包含一个单词,不含词组。这些单词构成了Mr. Right的字典。每个单词长度不大于9个字母。接着一行为一个整数m,1<=m<=100,表示Mr. Right将看见的单词数。之后m行每行包含一个单词。(题目中出现的每个单词都只由小写字母组成)
Output
对应Mr. Right看到的每个单词,输出落在字典里的它的变位词的个数。
Sample Input
3 tea ate eat 3 ate abc tea
Sample Output
3 0 3
//偷懒,STL(map)
#include<iostream>
#include<algorithm>
#include<string>
#include<map>
using namespace std;
int main()
{
int n,m,i,len;
char c[10];
string str;
map<string,int> mm;
map<string,int>::iterator it;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%s",c);
len=strlen(c);
sort(c,c+len);
str=c;
it=mm.find(str);
if(it==mm.end())
mm[str]=1;
else
mm[str]=it->second+1;
}
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%s",c);
len=strlen(c);
sort(c,c+len);
str=c;
it=mm.find(str);
if(it==mm.end())
printf("0/n");
else
printf("%d/n",it->second);
}
mm.clear();
}
return 0;
}