P6501 [COCI2010-2011#3] EKIPA题解
77777_1031 · · 题解
题目传送门
更好的阅读体验
题外话:说实话这题挺水的。
Part 1 题目分析
因为每个人只能参加一类比赛,所以为了得到最大值,只存这个人最大的知识积累程度就行,不用考虑是哪个比赛。再将每个人的最大知识积累程度排序,需要多少人就取多少人。
Part 2 代码(带有注释)
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
double ans=0.0;
double a[10000001];
int main(){
cin>>n>>m>>k;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
int x;
double y;
cin>>x>>y;
if(y>a[x])a[x]=y;//在这个人编号的位置存储最大知识积累程度
}
}
sort(a+1,a+n+1);
for(int i=n;i>(n-k);i--)ans+=a[i];//将每个人的最大知识积累程度相加,因为 sort 默认从小到大排序,所以从后往前扫。
printf("%.1f\n",ans);//输出保留一位小数
return 0;
}
AC 记录
我的博客~~
by 2021.12.10 我的第五篇题解。