開啟章節選單
10420 List of Conquests
題目連結
題目敘述
在第一幕中,Leporello 向 Donna Elvira 展示他主人的漫長愛情名單:
「這是我主子曾愛過的美女名單,我親自整理的名單:看看吧,跟我一起讀。在義大利有六百四十位,在德國二百三十一位,在法國一百位,在土耳其九十一位;但在西班牙,已經有一千零三位!其中有鄉村少女、女僕、都市美女;有伯爵夫人、男爵夫人、侯爵夫人、公主:各種階級、各種身材、各種年齡的女人。」
——《親愛的小姐,這是目錄(Madamina, il catalogo questo)》
Leporello 依照時間順序記錄 Don Giovanni 曾愛過的每位女子。然而,每次向別人展示這份名單時,他總得一再地統計每個國家的女子人數,這實在太麻煩了
你要幫助 Leporello 統計出他主子 Don Giovanni 在每個國家愛過多少位女子
輸入說明
輸入最多包含 2000 行
- 第一行是一個整數
n
,表示接下來有n
行資料 - 接下來的
n
行,每行最多 75 個字元,格式為:- 「國家名稱(單一單字)」 + 「女子全名(可能包含空格)」
你可以假設所有的「國家名稱」都是一個單字,且不包含空白
- 「國家名稱(單一單字)」 + 「女子全名(可能包含空格)」
輸出說明
輸出若干行,每行包含一個國家與 Don Giovanni 在該國愛過的女子人數,格式如下:
國家名稱 女子人數
各行須依國家名稱的字母順序輸出
解題思路
利用 unordered_map
和 set
這兩個容器來記錄國家對應的數量和出現幾個國家(因為是set所以會依照字母序排列),以及利用 stringstream
可以切割空白的特性,因為是紀錄國家對應的數量,所以後面人名不重要,切割第一次也就是切到國家就好
程式碼
#include <bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; cin.ignore(); unordered_map<string,int> mp; set<string> st; string s; for(int i=0;i<n;i++){ getline(cin,s); stringstream ss(s); string S; while(ss>>S){ mp[S]+=1; st.insert(S); break; } } for(auto K:st){ cout<<K<<" "<<mp[K]<<endl; } return 0; }