FZU 1410 变位词
2009-07-20 19:38
387 查看
变位词
解题:
第一次运用STL解题,感觉不错。方便呀,怎么以前不知道这东东,以后还是要训练用的好。
先将字典排序,例如样例里三个字典排序后都为aet,存在map容器里,关键码即为aet,因为只能存放相同的关键码,所以在值上令为3,具体实现看代码。
Time Limit:1s | Memory limit:32M |
Accepted Submit:310 | Total Submit:1085 |
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 |
第一次运用STL解题,感觉不错。方便呀,怎么以前不知道这东东,以后还是要训练用的好。
先将字典排序,例如样例里三个字典排序后都为aet,存在map容器里,关键码即为aet,因为只能存放相同的关键码,所以在值上令为3,具体实现看代码。
#pragma warning(disable:4786) #include <map> #include <string> #include <iostream> using namespace std; string change(string a) { int i,j; char k; for(i=1;i<a.length();i++) { k=a[i]; j=i-1; while(j>=0 && a[j]>k) { a[j+1]=a[j]; j--; } a[j+1]=k; } return a; } int main() { int m,n;int count=1; string s; map < string,int > theWords; map < string,int >::iterator iter; cin>>n; while(n--) { cin>>s; s=change(s); iter=theWords.find(s); if(iter==theWords.end()) { theWords.insert(map < string, int >::value_type(s,1)); } else iter->second++; } cin>>m; while(m--) { cin>>s; s=change(s); iter=theWords.find(s); if(iter==theWords.end()) { cout<<0<<endl; } else { cout<<iter->second<<endl; } } return 0; }
相关文章推荐
- FZU1410 (map+sort)之 变位词
- FZU 1410 变位词
- Problem 1410 变位词 from http://acm.fzu.edu.cn/problem.php?pid=1410
- FZU 1410 变位词
- FOJ 1410 变位词
- FZU 1889 龟兔赛跑
- fzu2143
- FZU-1054 阅读顺序(水、反转字符串处理)
- FZU 2155(并查集的删除)
- FZU 2176 easy problem (DFS序+树状数组)
- fzu 1227 鸡毛信问题(树形DP)
- FZU 2095 水面高度
- FZU 2034 Password table(水题)
- FZU 2150(DFS+BFS)
- fzu oj 2236 第十四个目标 树状数组好题 dp
- FZU-2218 Simple String Problem
- 变位词问题
- PTA fzu_oop_east
- fzu_oop_east 第二次作业
- FZU 2232 炉石传说(二分图最大匹配)