1. 程式人生 > >備戰Noip2018模擬賽7(B組)T1 Voting 兔子選舉

備戰Noip2018模擬賽7(B組)T1 Voting 兔子選舉

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;
}