給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。
輸入首先給出正整數n(≤105),為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。
在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則輸出狂人中最小的號碼及其通話次數,並且附加給出並列狂人的人數。
4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832
13588625832 3
題目詳解:因為只要簡單的把兩個人通話的記錄記下來,然後排序選出通話次數最多的那些人;
(1)顯而易見要麼開個通話陣列記錄次數,但是**號太長,根本開不了這麼長的陣列,那就會想到了將**號離散化處理再開個陣列記錄。
(2)開個結構體陣列記錄**號和次數,但是面臨的乙個問題便是查詢**號時時間複雜度高,超時。。。。。
(3)使用對映關係,從字串對映到數字,用到std庫中的map資料結構,其內部實現就是平衡二叉樹,排序問題是自動有序並且時間複雜度nlog(n),最後直接就可以查詢首部元素,以及記錄最大值的數量問題就迎刃而解了。
#include#include#includeusing namespace std;
int main()
int count=0;
int flag=0;
for(it=c.begin(); it!=c.end(); ++it) else if(flag==it->second)
count++;//最大通話使用者人數
} cout
cout<<" "
}
電話聊天狂人
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入格式 輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。輸出格式 在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如...
電話聊天狂人
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入格式 輸入首先給出正整數n 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。輸出格式 在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人...
電話聊天狂人
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入格式 輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。輸出格式 在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如...