题意:
熊所居住的 D 国,是一个完全尊重人权的国度。以至于这个国家的所有人命名自己的名字都非常奇怪。一个人的名字由若干个字符组成,同样的,这些字符的全排列的结果中的每 一个字符串,也都是这个人的名字。例如,如果一个人名字是 ACM,那么 AMC, CAM, MAC, MCA, 等也都是这个人的名字。在这个国家中,没有两个名字相同的人。度熊想统计这个国家的人口数量,请帮助度熊设计一个程序,用来统计每一个人在之前被统计过多少次。
思路:
利用STL的map以人名为键值,以出现的次数为值,建立映射就OK了.每次输入时对这个字符串排序,经过重新排列后一样的字符串按照字典序排序后也必定相同.
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <string> 7 #include <map> 8 using namespace std; 9 map <string, int> mp; 10 11 int main() 12 { 13 //freopen("input.txt", "r", stdin); 14 int n; 15 scanf("%d", &n); 16 while(n--){ 17 char s[47] = {0}; 18 scanf("%s", s); 19 int len = strlen(s); 20 sort(s, s + len); 21 map<string, int>::iterator iter; 22 string str(s); 23 iter = mp.find(str); 24 if(iter == mp.end()){ 25 printf("0\n"); 26 mp.insert(pair <string, int> (str,1)); 27 } 28 else{ 29 printf("%d\n", iter -> second); 30 iter -> second++; 31 } 32 } 33 return 0; 34 }
时间: 2024-10-06 02:30:59