P1808 单词分类_NOI导刊2011提高(01)

题目描述

Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类。

两个单词可以分为一类当且仅当组成这两个单词的各个字母的数量均相等。

例如“AABAC”,它和“CBAAA”就可以归为一类,而和“AAABB”就不是一类。

现在Oliver有N个单词,所有单词均由大写字母组成,每个单词的长度不超过100。你要告诉Oliver这些单词会被分成几类。

输入输出格式

输入格式:

 

输入文件的第一行为单词个数N,以下N行每行为一个单词。

 

输出格式:

 

输出文件仅包含一个数,表示这N个单词分成的类数

输入输出样例

输入样例#1: 复制
3 
AABAC 
CBAAA 
AAABB
输出样例#1: 复制
2

说明

对于70%的数据满足N≤100。 对于100%的数据满足N≤10000。

昨天就看了挺久这道题,

一直没想出比较合适的方法。

几个题解的思路好像想到了,

但是储备知识不足,,

char数组,和string的一些细节区别,

运用上的区别不是特别清楚,

先排序再比较是否相同是可行的。

那就自己试着写吧。。。

这里用的map。

就比较简单易懂了。

也是先排序(对每个字符串),

然后看是否出现过。。。

 

详见代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<queue>
 7 #include<map> 
 8 using namespace std;
 9 
10 int n,ans;
11 string a;
12 map<string,bool>x;
13 
14 int main()
15 {
16     scanf("%d",&n);
17     for(int i=1;i<=n;++i)
18     {
19         cin>>a;
20         sort(a.begin() ,a.end() );
21         if(!x[a])
22         {
23             ans++;
24             x[a]=1;    
25         }
26     }    
27     printf("%d",ans);
28     return 0;
29 }

如果你不开心,那我就把右边这个帅傻子分享给你吧, 

你看,他这么好看,那么深情的望着你,你还伤心吗? 

真的!这照片盯上他五秒钟就想笑了。 

一切都会过去的。

原文地址:https://www.cnblogs.com/Mary-Sue/p/9428230.html