【HDU - 5688 】Problem D(STL+map)
生活随笔
收集整理的這篇文章主要介紹了
【HDU - 5688 】Problem D(STL+map)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題干:
度熊所居住的 D 國,是一個完全尊重人權的國度。以至于這個國家的所有人命名自己的名字都非常奇怪。一個人的名字由若干個字符組成,同樣的,這些字符的全排列的結果中的每一個字符串,也都是這個人的名字。例如,如果一個人名字是 ACM,那么 AMC, CAM, MAC, MCA, 等也都是這個人的名字。在這個國家中,沒有兩個名字相同的人。?
度熊想統計這個國家的人口數量,請幫助度熊設計一個程序,用來統計每一個人在之前被統計過多少次。?
Input
這里包括一組測試數據,第一行包含一個正整數NN,接下來的NN?行代表了?NN?個名字。NN?不會超過100,000100,000,他們的名字不會超過40位.?
Output
對于每輸入的一個人名,輸出一個整數,代表這個人之前被統計了多少次。
Sample Input
5 ACM MAC BBA ACM BABSample Output
0 1 0 2 1解題報告;
? ? 想找個辦法水掉排序,這樣復雜度會很低,但是失敗了。。。老老實實用排序。
AC代碼:
#include<bits/stdc++.h>using namespace std; struct Node {int bk[30];bool operator < ( const Node b)const {bk[0]<b.bk[0];} }tmp1,tmp2; int main() {char s[50];int n,len; // freopen("in.txt","r",stdin);map<string,int> mp; /* map<Node,int> mp;map<Node,int> ::iterator it;map<int, int> mpp;mpp[1]++;mpp[1]++;cout<<"%%%%"<<mpp[1]<<endl;tmp1.bk[1]=2;tmp2.bk[1]=2;it = mp.begin();//mp[tmp1]++;mp.insert(make_pair(tmp1,0) );cout<<mp[tmp1]<<endl;mp[tmp2]++;cout<<mp[tmp1]<<endl;for(; it!=mp.end(); it++)cout<< it->second <<endl;cout<<"hhhhhhhh"<<endl; */cin>>n;while(n--) {Node tmp ;scanf("%s",s);len = strlen(s);sort(s,s+len);printf("%d\n",mp[s]);mp[s]++;/*for(int i = 0 ; i<len; i++) {tmp.bk[s[i]-'a']++;}printf("%d\n",mp[tmp]);mp[tmp]++;*/}return 0 ; }?
總結
以上是生活随笔為你收集整理的【HDU - 5688 】Problem D(STL+map)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【蓝桥杯 - 练习】k倍区间(思维,数组
- 下一篇: 【HDU - 2553】N皇后问题 (d