Submission #1299784

#TimeUsernameProblemLanguageResultExecution timeMemory
1299784trandangquang카니발 티켓 (IOI20_tickets)C++20
100 / 100
489 ms62292 KiB
#include "tickets.h"
#include<bits/stdc++.h>
using namespace std;

#define foru(i,a,b) for(int i=(a); i<=(b); ++i)
#define ford(i,a,b) for(int i=(a); i>=(b); --i)
#define rep(i,a) for(int i=0; i<(a); ++i)
#define sz(a) (int)(a).size()
#define all(a) (a).begin(),(a).end()
#define bit(s,i) (((s)>>(i))&1)
#define ii pair<int,int>
#define vi vector<int>
#define vii vector<ii>
#define fi first
#define se second
#define ll long long
#define eb emplace_back
#define pb push_back
#define __builtin_popcount __builtin_popcountll
#define _ << " " <<

template <class X, class Y> bool maxi(X &x, Y y){return x<y?x=y,true:false;}
template <class X, class Y> bool mini(X &x, Y y){return x>y?x=y,true:false;}

ll find_maximum(int rnds, vector<vi> pts) {
    int n,m; n=sz(pts); m=sz(pts[0]);

    vii mi(n), ptsGain;
    vi usedL(n,0), usedR(n,0);

    ll res=0;
    rep(i,n){
        mi[i]=ii(rnds,i);
        rep(j,rnds) res-=pts[i][j];
        for(int j=rnds-1, k=m-1; j>=0; --j, --k){
            ptsGain.pb({pts[i][j]+pts[i][k], i});
        }
    }

    sort(all(ptsGain),greater<ii>());
    rep(i,rnds*n/2){
        res+=ptsGain[i].fi;
        int col=ptsGain[i].se;
        mi[col].fi--;
    }

    vector<vi> tickets(n, vi(m,-1));
    rep(i,rnds){
        sort(all(mi),greater<ii>());
        rep(j,n/2){
            int col=mi[j].se;
            tickets[col][usedL[col]]=i;
            usedL[col]++; --mi[j].fi;
        }
        foru(j,n/2,n-1){
            int col=mi[j].se;
            tickets[col][m-usedR[col]-1]=i;
            usedR[col]++;
        }
    }

    allocate_tickets(tickets);
    return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...