变位词
Time Limit:1s | Memory limit:32M |
Accepted Submit:204 | Total Submit:725 |
Mr. Right有一个奇怪的嗜好,就是看见一个单词就有找它所有的变位词的冲动。一个单词的变位词就是该单词所有字母的一个排列。 输入输出格式 输入数据第一行为一个整数n,1<=n<=10^5,之后n行每行只包含一个单词,不含词组。这些单词构成了Mr. Right的字典。每个单词长度不大于9个字母。接着一行为一个整数m,1<=m<=100,表示Mr. Right将看见的单词数。之后m行每行包含一个单词。(题目中出现的每个单词都只由小写字母组成)对应Mr. Right看到的每个单词,输出落在字典里的它的变位词的个数。 输入样例 3 tea ate eat 3 ate abc tea 输出样例 3 0 3 Original: FZUPC 2006 |
首先佩服我的RP,第一次提交1.00s通过,ft...........
把cin改scanf就快多了也...
思路是把词排序完比较,这样会快点............................................大牛们说可以用树,不懂树的人只能路过了......
- #include <iostream>
- #include <algorithm>
- using namespace std;
- struct dictionary
- {
- char word[10];
- }w[100001];
- char temp[10];
- int main()
- {int n,m,i,j,num;
- scanf("%d",&n);
- getchar();
- for(i=1;i<=n;i++)
- {
- scanf("%s",w[i].word);
- sort(w[i].word,w[i].word+strlen(w[i].word));
- }
- scanf("%d",&m);
- getchar();
- for(i=1;i<=m;i++)
- {
- num=0;
- scanf("%s",temp);
- sort(temp,temp+strlen(temp));
- for(j=1;j<=n;j++)
- if(strcmp(temp,w[j].word)==0) num++;
- printf("%d/n",num);
- }
- return 0;
- }