时间限制1.00s 内存限制125.00MB 难易度:普及−
【题目描述】
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。
【算法分析】
我们用 sort 给单词内部排序,在将所有单词排序,这样组成单词的字母的一样的字符串就是相邻的了,然后统计种类即可。
【参考代码】
#include <bits/stdc++.h>
using namespace std;
string s[10010];
int n,ans=0;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s[i];
sort(s[i].begin(),s[i].end());
}
sort(s+1,s+n+1);
for(int i=1;i<=n;i++)
if(s[i-1]!=s[i]) ans++;
cout<<ans;
return 0;
}