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 go n 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 i lines, each prediction has the form <name_of_university> : . Here, 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
题意:让你输入12个学校,从一个开始数起,前四个为金牌,中间四个为银牌,最后为铜牌,有一些人在猜哪个学校中了什么奖,选出其中猜对最多的人数,给每个人发五美元,算一下要发多少钱。
题解:
用map函数把得奖学校和得奖牌链接起来,然后对猜的学校一 一对照,就可以算出每个人猜对的学校数了,然后给他们从小到大排序好,计算出最大的数有几个再乘以5输出即可
ac代码
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <math.h>
#include<map>
#include <cstdlib>
#include <queue>
#include<iomanip>
using namespace std;
int p[105];
char a[13][50];
char s1[40],s2[4];
char s3[10];
int kkk;
map<string, string>t;
int main()
{
int n, m,dp=0,k=0;
for (int i = 0; i < 4; i++)
{
cin >> a[i]; t[a[i]] = "gold";
}for (int i = 4 ;i < 8; i++)
{
cin >> a[i]; t[a[i]]="silver";
}
for (int i = 8; i < 12; i++)
{
cin >> a[i]; t[a[i]] = "bronze";
}
cin >> n;
while (n--)
{
int ant = 0, sum = 0;
cin >> m;
for (int j = 0; j < m; j++)
{
cin >> s1 >> s2 >> s3;
if (t[s1] == s3)
ant++;
}
p[k++] = ant;
}
sort(p, p + k);
for (int i = k - 1; i >= 0; i--)//一开始是for(int i=k-1;p[i]==p[k-1];i--)dp++;不明白为什么不可以,就算i是负数,那么p[i]不就是一个很大的负数吗,不就会跳出循环吗?看到的懂的可以解释一下吗?
if (p[i] == p[k - 1])dp++;
cout << dp*5 << endl;
}