URAL - 1868(map)

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;
	
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值