頭良くなりたい人

文系大学生shadeのブログです。競技プログラミングや人文学の話題,受験ネタなど。

AGC012 A - AtCoder Group Contest

問題はこちら atcoder.jp

方針

a_i を降順ソートします。このとき,a_1,a_2,...,a_{3N} の中から各チームの2番目の人の強さをできるだけ大きくするには,(a_1,a_2,a_{3N}),(a_3,a_4,a_{3N-1}),...,(a_{2N-1},a_{2N},a_{2N+1}) のようにチーム分けをすれば良いです。つまり,求める和は \sum_{k=1}^{N} a_{2i} です。

コード

#include <bits/stdc++.h>
using namespace std;
#define REP(i,n) for(int i=0; i<(n); i++)
#define ALL(n) begin(n),end(n)
 
int main(){
    long long n;
    cin>>n;
 
    vector<long long> a(3*n);
    REP(i,3*n){
        cin>>a[i];
    }
 
    sort(ALL(a));
    reverse(ALL(a));
    long long sum=0;
 
    REP(i,n){
        sum+=a[2*i+1];       
    }
 
    cout<<sum<<endl;
}