题目描述
Oliver 为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类。
两个单词可以分为一类当且仅当组成这两个单词的各个字母的数量均相等。
例如 AABAC,它和 CBAAA 就可以归为一类,而和 AAABB 就不是一类。
现在Oliver有 N 个单词,所有单词均由大写字母组成,每个单词的长度不超过 100。你要告诉 Oliver 这些单词会被分成几类。
输入格式
输入文件的第一行为单词个数 N,以下 N 行每行为一个单词。
输出格式
输出文件仅包含一个数,表示这 N 个单词分成的类数。
输入输出样例
输入 #1
3 AABAC CBAAA AAABB
输出 #1
2
说明/提示
- 对于 70% 的数据满足 1≤N≤100;
- 对于 100% 的数据满足 1≤N≤10000。
思路
队列+搜索。
完整代码
#include<bits/stdc++.h>
using namespace std;
set<map<char,int> >Set;
int n,len_s;
string s;
void search(int a){
for(int i=1;i<=a;++i){
map<char,int> Map;
cin>>s;
len_s=s.size();
for(int j=0;j<len_s;++j)++Map[s[j]];
Set.insert(Map);
}
return ;
}
int main(){
cin>>n;
//freopen("a.in","r",stdin);
search(n);
cout<<Set.size();
//freopen("b.out","w",stdout);
return 0;
}