百度之星资格赛 2016 Problem 1004

本文链接:http://www.cnblogs.com/Ash-ly/p/5494630.html

题意:

  熊所居住的 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 }

 

posted @ 2016-05-15 09:40  vrsashly  阅读(254)  评论(0编辑  收藏  举报