Submission #980287

#TimeUsernameProblemLanguageResultExecution timeMemory
98028712345678Carnival Tickets (IOI20_tickets)C++17
100 / 100
620 ms76520 KiB
#include "tickets.h"
#include <bits/stdc++.h>

using namespace std;

#define ll long long

const int nx=1505;

ll N, M, res, l[nx], r[nx], cnt;
priority_queue<pair<ll, ll>> pq;

long long find_maximum(int k, std::vector<std::vector<int>> x) {
	N=x.size();
    M=x[0].size();
    vector<vector<int>> t(N, vector<int> (M));
    cnt=k*N/2;
    for (int i=0; i<N; i++) for (int j=0; j<k; j++) res-=x[i][j];
    for (int i=0; i<N; i++) l[i]=k-1, r[i]=M-1, pq.push({x[i][l[i]]+x[i][r[i]], i});
    while (cnt--)
    {
        auto tmp=pq.top();
        pq.pop();
        res+=tmp.first;
        int i=tmp.second;
        l[i]--;
        r[i]--;
        if (l[i]==-1) continue;
        pq.push({x[i][l[i]]+x[i][r[i]], i});
    }
    for (int i=0; i<N; i++) r[i]++;
    //for (int i=0; i<N; i++) printf("debug %d %d %d\n", i, l[i], r[i]);
    for (int i=0; i<N; i++) for (int j=l[i]+1; j<r[i]; j++) t[i][j]=-1;
    for (int i=0; i<k; i++)
    {
        vector<int> vs(N);
        vector<pair<int, int>> v;
        for (int j=0; j<N; j++) v.push_back({l[j]+1, j});
        sort(v.begin(), v.end());
        reverse(v.begin(), v.end());
        for (int j=0; j<N/2; j++) t[v[j].second][l[v[j].second]]=i, l[v[j].second]--, vs[v[j].second]=1;
        for (int j=0; j<N; j++) if (!vs[j]) t[j][r[j]]=i, r[j]++;
    }
    allocate_tickets(t);
    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...