AGC012 A-AtCoder Group Contest (thinking, greedy)

Title:

Insert picture description here

solution:

对a[]从小到大排序,
显然最小的n个数一定不是答案,作为每一组的最小值.
然后贪心低从后往前选择,倒数第一个数作为某一组的最大值,倒数第二个数就可以作为这组的次大值计入答案,
倒数第三个数作为某一组的最大值,倒数第四个数作为这组的次大值计入答案,
之后同理.

code:

#include <bits/stdc++.h>
#define int long long
#define PI pair<int,int>
using namespace std;
const int maxm=2e6+5;
int a[maxm];
int n;
void solve(){
    
    
    cin>>n;
    for(int i=1;i<=n*3;i++){
    
    
        cin>>a[i];
    }
    sort(a+1,a+1+n*3);
    int ans=0;
    for(int i=n*3-1,cnt=1;i>=1&&cnt<=n;i-=2,cnt++){
    
    
        ans+=a[i];
    }
    cout<<ans<<endl;
}
signed main(){
    
    
    ios::sync_with_stdio(0);
    solve();
    return 0;
}

Guess you like

Origin blog.csdn.net/weixin_44178736/article/details/114889288