備戰Noip2018模擬賽7(B組)T1 Voting 兔子選舉
阿新 • • 發佈:2019-01-10
10月5日備戰Noip2018模擬賽7(B組)
T1 Voting 兔子選舉
題目描述
兔子常常感到孤獨,所以一組的兔子決定走到一起,並舉行選美比賽,以確定它們之間誰擁有最漂亮的耳朵。規則如下:
每隻兔提交一票。如果ta投了自己一票,這樣的投票被認為是無效的並把這張選票刪除。最後,收到的最多有效票者勝出。
給定n只兔子的姓名,以及它所投出的選票。輸出獲勝的兔子姓名。若不存在唯一的最高選票的兔子,則輸出一個空串。
輸入格式
輸入檔案voting.in,有多組測試資料:
第一行,包含一個整數Num,表示測試資料的組數。(1<=Num<=10)
每組測試資料,
第一行一個整數N,表示共有N只兔子。2<=N<=50.
接下來一行,N個字串,表示N只兔子的名字,資料保證名字不會相同,名字中只包含英文字母,名字長度不超過50個字元,中間用1個空格分隔。最後一行,N個字串,表示每隻兔子的選票,保證是其中一隻兔子的名字。
輸出格式
輸出檔案voting.out,共Num行,
每行輸出獲勝的兔子,若最高選票有多個,輸出一個空串。
輸入樣例
5 4 Alice Bill Carol Dick Bill Dick Alice Alice 4 Alice Bill Carol Dick Carol Carol Bill Bill 4 Alice Bill Carol Dick Alice Alice Bill Bill 2 Alice Bill Alice Bill 4 WhiteRabbit whiterabbit whiteRabbit Whiterabbit whiteRabbit whiteRabbit whiteRabbit WhiteRabbit
輸出樣例
Alice
Bill
whiteRabbit
map真的超級好用呢
map < string, int > vot 表示從string型別(兔子的名字)到int型別(所得票數)的對映
Eg.可愛的兔子Bunny 得到了233票, 那麼就可以表示成 vot['Bunny'] = 233;
程式碼
#include <iostream> #include <cstdio> #include <map> //map要加這個標頭檔案 using namespace std; const int N = 51; map <string, int> vot; //尖括號使用時最好加上空格,不然可能會被認為是移位 int num, n, Max; string s, winner; string nam[N]; bool b; int main() { //freopen ("voting.in", "r", stdin); //freopen ("voting.out", "w", stdout); cin >> num; for (int t = 1; t <= num; t++){ cin >> n; for (int i = 1; i <= n; i ++){ cin >> nam[i]; vot[nam[i]] = 0; //把所有兔子的票數初始化為0 (map的用法) } Max = 0; b = 0; //把bool b初始化false,防止所有兔子都很不要臉的投了自己 for (int i = 1; i <= n; i ++){ cin >> s; if (s != nam[i]){ //判斷是否有兔子無恥的投了自己 vot[s] ++; if (vot[s] > Max){ Max = vot[s]; winner = s; b = 1; } else if (vot[s] == Max) b = 0; //看看是否有兔子的票數一樣 } } if (Max > 0 && b) cout << winner << endl; else cout << endl; } //fclose (stdin); //fclose (stdout); return 0; }