您的位置:首页 > 其它

FZU 1410 变位词

2016-08-15 20:01 330 查看
C - 变位词
Time Limit:1000MS    Memory Limit:32768KB    64bit IO Format:%I64d
& %I64u
SubmitStatusPracticeFZU
1410

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


解题报告:对每个单词都排个序,然后strcmp比较久OK了。注意,不要写循环输入 while(~scanf("%d",&n)),会超时。

 

code:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<queue>
#include<math.h>
#include<string.h>
#include<stdlib.h>

using namespace std;
typedef long long ll;

int main(){
// freopen("input.txt","r",stdin);
char s[100005][15];
char ch[15];
int n,m;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s",s[i]);
sort(s[i],s[i]+strlen(s[i]));
}
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%s",ch);
sort(ch,ch+strlen(ch));
int num=0;
for(int j=0;j<n;j++){
if(strcmp(s[j],ch)==0)
num++;
}
printf("%d\n",num);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm FZU 1410 变位词