P6501 [COCI2010-2011#3] EKIPA题解

· · 题解

题目传送门

更好的阅读体验

题外话:说实话这题挺水的。

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 我的第五篇题解。