PTA 7 14 電話聊天狂人

2021-10-04 16:15:55 字數 1862 閱讀 1183

這個題是乙個 map 應用的題目,但是由於測試點的特殊性,還是有需要注意的點。

這道題的額外收穫是學習到了如何根據 map 的value 排序。

給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。

輸入格式:

輸入首先給出正整數n(≤105),為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。

輸出格式:

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

輸入樣例:

4

13005711862 13588625832

13505711862 13088625832

13588625832 18087925832

15005713862 13588625832

輸出樣例:

13588625832 3
這個題其實就是簡單的 map 的應用,但是由於最後的資料太大

導致最後的測試點一直過不去,所以最終還是用 ·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位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則...