备战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 
#include 
#include             
//map要加这个头文件

using namespace std;

const int N = 51;

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

 

你可能感兴趣的:(模拟赛,NOIP普及,STL)