输入一些仅由小写字母组成的单词。你的任务是统计有多少个单词是“酷”的,即每种字母出现的次数都不同。 比如ada是酷的,因为a出现2次,d出现1次,而1和2不同。再比如,banana也是酷的,因为a出现3次,n出现2次,b出现1次。但是,bbacccd不是酷的,因为a和d出现的次数相同(均为1次)。
标签:
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1505
输入一些仅由小写字母组成的单词。你的任务是统计有多少个单词是“酷”的,即每种字母出现的次数都不同。 比如ada是酷的,因为a出现2次,d出现1次,而1和2不同。再比如,banana也是酷的,因为a出现3次,n出现2次,b出现1次。但是,bbacccd不是酷的,因为a和d出现的次数相同(均为1次)。
输入包含不超过30组数据。每组数据第一行为单词个数n (1<=n<=10000)。以下n行各包含一个单词,字母个数为1~30。
对于每组数据,输出测试点编号和酷单词的个数。
2
ada
bbacccd
2
illness
a
Case 1: 1
Case 2: 0
分析:
只要记录每个单词出现的次数即可,需要注意的是:当出现“aaa” ,,,的时候,结果是0 。
官方标程:
1 // Rujia Liu 2 #include<cstdio> 3 #include<string> 4 #include<algorithm> 5 #include<cassert> 6 using namespace std; 7 8 bool cool(string w) { 9 int cnt[26] = {0}; 10 if(w.length() < 2) return false; 11 for(int i = 0; i < w.length(); i++) 12 cnt[w[i]-‘a‘]++; 13 sort(cnt, cnt+26); 14 for(int i = 1; i < 26; i++) 15 if(cnt[i] != 0 && cnt[i] == cnt[i-1]) return false; 16 return true; 17 } 18 19 int main() { 20 int n, kase = 0; 21 while(scanf("%d", &n) == 1) { 22 assert(n<=10000); 23 int cnt = 0; 24 for(int i = 0; i < n; i++) { 25 char w[100]; 26 scanf("%s", w); 27 assert(strlen(w) <= 30); 28 if(cool(w)) cnt++; 29 // if(cool(w)) printf("%s\n", w); 30 } 31 printf("Case %d: %d\n", ++kase, cnt); 32 } 33 return 0; 34 }
标签:
原文地址:http://www.cnblogs.com/jeff-wgc/p/4469976.html