PAT-7-14 電話聊天狂人

ps: 真不明白爲何水題不能一次acc++

7-14 電話聊天狂人(25 分)

給定大量手機用戶通話記錄,找出其中通話次數最多的聊天狂人。數組

輸入格式:

輸入首先給出正整數N(105​​),爲通話記錄條數。隨後N行,每行給出一條通話記錄。簡單起見,這裏只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。spa

輸出格式:

在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。若是這樣的人不惟一,則輸出狂人中最小的號碼及其通話次數,而且附加給出並列狂人的人數。code

輸入樣例:

4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832

輸出樣例:

13588625832 3
 1 #include <bits/stdc++.h>
 2 using namespace std;  3 const int N=1e5+7;  4 struct T {  5     long long  name;// 開始用的string 形成超時
 6     int num;  7 };  8 map < long long ,int > mp;  9 T t[2*N];// 數據開小形成段錯誤
10 int cnt; 11 int n; 12 inline void f (long long s) { 13     if (!mp[s]) { 14             mp[s]=++cnt; 15             t[cnt].name=s; 16             t[cnt].num=1; 17  } 18         else { 19             int k=mp[s]; 20             t[k].num++; 21  } 22     return ; 23 } 24 bool cmp (T a, T b) { 25     if (a.num==b.num) 26         return a.name<b.name; 27     return a.num>b.num; 28 } 29 int main () 30 { 31     scanf ("%d",&n); 32     for (int i=1;i<=n;i++) { 33         long long s1,s2; 34         scanf ("%lld %lld",&s1,&s2); 35  f(s1); 36  f(s2); 37  } 38     sort (t+1,t+1+cnt,cmp); // 記住cnt表示數組大小而不是n!!!!!!!!!!
39     int sum=1; 40     for (int i=2;i<=cnt;i++) { 41         if (t[i].num==t[1].num) sum++; 42         else                    break; 43  } 44     printf ("%lld %d",t[1].name,t[1].num); 45     if (sum>1) printf (" %d",sum); 46     printf ("\n"); 47     return 0; 48 }
相關文章
相關標籤/搜索