這個題是乙個 map 應用的題目,但是由於測試點的特殊性,還是有需要注意的點。
這道題的額外收穫是學習到了如何根據 map 的value 排序。
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。這個題其實就是簡單的 map 的應用,但是由於最後的資料太大輸入格式:
輸入首先給出正整數n(≤105),為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。
輸出格式:
在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則輸出狂人中最小的號碼及其通話次數,並且附加給出並列狂人的人數。
輸入樣例:
輸出樣例:4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832
13588625832 3
導致最後的測試點一直過不去,所以最終還是用 ·long long
來儲存**號碼作為 map 的 key 值。
/*
author: veeupup
*/#include
using
namespace std;
map<
long
long
,int
> p;
///longlong 對應陣列下表,int是資料型別;
intmain()
p[s]++;
if(p[s]
> max)
max = p[s];}
map<
long
long
,int
>
::iterator t;
long
long numb;
int count =0;
for(t = p.
begin()
; t != p.
end(
); t++)}
cout << numb;
printf
(" %d"
, max);if
(count >1)
printf
(" %d"
, count)
;return0;
}
這道題的額外收穫是學習到了如何根據 map 的value 排序。
我們可以將 map 轉為 vector 然後進行排序。
想直接用 sort 排序做不到,sort 只支援 陣列,vector 等的排序,所以我們先把 map 裝進 pair 中,然後放入 vector 進行排序。
假設我們有乙個mapm
的map,我們將其轉換為vector
來進行排序。
vector< pairint>
> vec;
for(mapint>
::iterator it = m.
begin()
; it != m.
end(
); it++
)sort
(vec.
begin()
, vec.
end(
), cmp)
;bool
cmp(pairint> a, pairint> b)
按照如此方式即可根據 value 排序。 7 14 電話聊天狂人
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數n 10 5 10的5次方 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣...
7 14 電話聊天狂人(map)
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入格式 輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。輸出格式 在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如...
7 14 電話聊天狂人 (25 分)
給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則...