Prediction Contest URAL - 1868

Problem Decription

At the ICPC World Finals, four sets of gold medals, four sets of silver medals, and four sets of bronze medals are awarded; thus, top twelve teams win medals.

There were few days left before the World Finals in Orlando. Veterans of collegiate programming contests from Ural State University were hotly debating chances of the teams for medals at the forthcoming contest. Vadik suggested that every person who wanted to make a prediction for the results of the finals should pool five dollars and state several guesses of the form “The team of university  X will win a medal of type  Y.” The veterans who made the maximum number of true guesses would share the pooled money between them.

But the veterans refused saying that the results of the finals are always very difficult to predict and nobody wanted to lose five dollars. Then Vadik changed the conditions of the prediction contest. He said that the participants didn't have to pay, but everybody who made the maximum number of true predictions would receive five dollars from Vadik. The veterans agreed to these conditions, and each of them stated several predictions about which team would win which medal.

Given the result of the World Finals and all the predictions made, find the amount of money that Vadik had to pay to the winners of the competition.

Input

In the first twelve lines you are given the names of the universities winning the medals of the World Finals. The universities are listed in the order from the first place to the twelfth place.

In the following line you are given the number  n of participants of the prediction contest (1 ≤ n ≤ 100). Then gon blocks containing the veterans' predictions. The ith block starts with the number of predictions  k i made by the ith participant. The predictions are given in the following k ilines, each prediction has the form <name_of_university> : <medal>. Here, <medal> is the word “gold”, “silver”, or “bronze”. The predictions of each participant are consistent: no university can win more than one medal and the total number of medals of each kind is at most four.

The names of the universities consist of uppercase and lowercase English letters, underscore characters, dots, and commas. The length of each name is in the range from one to thirty symbols.

Output

Output the amount of money that Vadik paid according to the result of the prediction contest. If more than one participant made the maximum number of true predictions, Vadik paid five dollars to each of them.

Example

input output
Zhejiang_U
U_of_Michigan_at_Ann_Arbor
Tsinghua_U
St._Petersburg_SU
Nizhny_Novgorod_SU
Saratov_SU
Friedrich_Alexander_U
Donetsk_National_U
Jagiellonian_U_in_Krakow
Moscow_SU
Ural_SU
U_of_Waterloo
3
6
Moscow_SU : gold
St._Petersburg_SU_of_ITMO : gold
Warsaw_U : gold
Tsinghua_U : gold
Nizhny_Novgorod_SU : silver
Saratov_SU : silver
6
Warsaw_U : gold
Saratov_SU : gold
Tsinghua_U : gold
Donetsk_National_U : silver
St._Petersburg_SU_of_ITMO : silver
Ural_SU : bronze
6
Zhejiang_U : gold
Tsinghua_U : gold
Shanghai_Jiao_Tong_U : gold
Fudan_U : gold
Moscow_SU : silver
Nizhny_Novgorod_SU : silver
15

题意:输入获得金奖,银奖,铜奖的大学名,然后让n个人每个人猜m个,找出猜中结果最多的,给5dollar,如果有猜的同样多的,每人给5dollar,输出需要付的奖金。

思路:思路很简单,麻烦的是输入,怎么输入看代码吧,这个题让我get了cin加个头文件string就可以输入字符串了

AC代码:

#include <iostream>
#include<algorithm>
#include<string>                    //有了这个头文件,cin就可以输入字符串了
#include <cstring>
using namespace std;
char namer[15][1005];            
bool guess(char*a,string b)            //用string类成员更方便,轻松调用函数
{                                           //判断猜的是否正确
	int l1=strlen(a);
	int l2=b.length();
	if(l1!=l2)return 0;
	else
	{
		for(int i=0;i<l1;i++)
		{
			if(a[i]!=b[i])return 0;
		}
		return 1;
	}
}
int main()
{
	ios::sync_with_stdio(false);            //加了这个说明就不用担心cin,cout输入输出慢了
	for(int i=0;i<12;i++)
		cin>>namer[i];                       
	int n,sum[105];
	cin>>n;
	for(int i=0;i<n;i++)
	{
		int m,ans=0;
		cin>>m;
		while(m--)
		{
			string name,medal,symbol;               
			cin>>name>>symbol>>medal;                //输入名字,符号,以及奖牌
			switch(medal[0])                        //直接根据奖牌首字母判断即可
			{
			case 'g':for(int i=0;i<4;i++)
					 {
						 if(guess(namer[i],name))
						 { 
							 ans++;
							 break;
						 }
					 }
					 break;
			case 's':for(int i=4;i<8;i++)
					 {
						 if(guess(namer[i],name))
						 {
						ans++;
							 break;
						 }
					 }break;
			case 'b':for(int i=8;i<12;i++)
					 {
						 if(guess(namer[i],name))
						 {
							 ans++;
							 break;
						 }
					 }
					 break;
			}
			sum[i]=ans;
		}
	}
	int maxn=0,c=0;
	for(int i=0;i<n;i++)
		maxn=max(maxn,sum[i]);
	for(int i=0;i<n;i++)
		if(sum[i]==maxn)                 //计数猜的最多的同样多的人
			c++;
	cout<<c*5;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43965640/article/details/87926519