[51Nod](1095)Anigram单词 ---- Hash(map)+排序
2018-04-04 20:06
603 查看
一个单词a如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的Anigram,例如单词army和mary互为Anigram。现在给定一个字典,输入Q个单词,从给出的字典中找出这些单词的Anigram。
第2 - N + 1行,字典中的单词,单词长度 <= 10。
第N + 2行:查询的数量Q。(1 <= Q <= 10000)
第N + 3 - N + Q - 2行:用作查询的单词,单词长度 <= 10。
add
dad
bad
cad
di
4000
d
3
add
cac
dda
0
2
思路: 利用STL的map,开两个容器,一个s,一个c, s记录的是原单词出现的次数,c记录单词排序后变成的新单词的出现的次数, 对于一个单词,新单词出现的次数-原单词出现的次数就是答案。
AC代码:
Input
第1行:1个数N,表示字典中单词的数量。(1 <= N <= 10000)第2 - N + 1行,字典中的单词,单词长度 <= 10。
第N + 2行:查询的数量Q。(1 <= Q <= 10000)
第N + 3 - N + Q - 2行:用作查询的单词,单词长度 <= 10。
Output
共Q行,输出Anigram的数量,相同的2个单词不算Anigram,如果没有输出0。Input示例
5add
dad
bad
cad
di
4000
d
3
add
cac
dda
Output示例
10
2
思路: 利用STL的map,开两个容器,一个s,一个c, s记录的是原单词出现的次数,c记录单词排序后变成的新单词的出现的次数, 对于一个单词,新单词出现的次数-原单词出现的次数就是答案。
AC代码:
#include<bits/stdc++.h> using namespace std; map<string,int>s,c; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL),cout.tie(NULL); int n; cin>>n; string str; for(int i=0;i<n;i++) { cin>>str; s[str]++;//map<string,int> 默认int 初始化为0 sort(str.begin(),str.end()); c[str]++; } int q; cin>>q; for(int i=0;i<n;i++) { cin>>str; int sorce_num = s[str]; sort(str.begin(),str.end()); int all_num = c[str]; cout<<all_num-sorce_num<<endl; } return 0; }
相关文章推荐
- 51 nod 1095 Anigram单词 利用map处理hash问题
- 51 NOD 1095 Anigram单词
- 1095 Anigram单词(51nod)
- 51nod 1095 Anigram单词 【map的使用】
- 51nod 1095 Anigram单词 (map——multiset结合)
- 51nod 1095 Anigram单词(map)
- 51nod oj 1095 Anigram单词【map】
- 51Nod 1095 Anigram单词 map
- 【51Nod】1095 - Anigram单词(STL - map)
- STL之map应用 +hash表(51nod 1095)
- 51Nod 1095 Anigram单词 | Hash
- [51NOD1095] Anigram单词(map)
- 1095 Anigram单词
- 任务执行排序(51nod 1099)
- 51nod 1095 Anigram单词
- 51nod 1095 Anigram单词
- 51NOD 1095 Anigram单词
- ruby的hash学习笔记例: 将字符串文本中的单词存放在map中
- 51 nod 1241 特殊的排序(思维)@
- 1095 Anigram单词