Submission #1215538

#TimeUsernameProblemLanguageResultExecution timeMemory
1215538cpdreamerCarnival Tickets (IOI20_tickets)C++17
11 / 100
1 ms836 KiB
#include "tickets.h"
#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e17;
typedef long long ll;
const ll MOD = (ll)1e9+7;
#define P pair
#define S second
#define F first
#define pb push_back
#define V vector
#define all(v) v.begin(), v.end()

long long find_maximum(int k, std::vector<std::vector<int>> x) {
    int n=(int)x.size();
    int m=(int)x[0].size();
    V<V<int>>ans(n,V<int>(m,-1));
    int h=n/2;
    V<P<int,P<int,int>>>vp;
    for (int i=0;i<n;i++) {
        for (int j=0;j<m;j++) {
            vp.pb({x[i][j],{i,j}});
        }
    }
    sort(all(vp));
    ll a=0;
    for (int i=0;i<h*m;i++) {
        a-=vp[i].F;
    }
    for (int i=h*m;i<n*m;i++) {
        a+=vp[i].F;
    }
    set<int>b[n];
    V<int>s(m,0);
    for (int i=0;i<n;i++) {
        for (int j=0;j<m;j++) {
            b[i].insert(j);
        }
    }
    for (int i=0;i<h*m;i++) {
        int y=*b[vp[i].S.F].begin();
        ans[vp[i].S.F][vp[i].S.S]=y;
        s[y]++;
        b[vp[i].S.F].erase(y);
        if (s[y]==h) {
            for (int j=0;j<n;j++) {
                if (b[j].count(y)) {
                    b[j].erase(y);
                }
            }
        }
    }
    for (int i=0;i<n;i++) {
        for (int j=0;j<m;j++) {
            b[i].insert(j);
        }
    }
    for (int i=0;i<n;i++) {
        for (int j=0;j<m;j++) {
            if (b[i].count(ans[i][j])) {
                b[i].erase(ans[i][j]);
            }
        }
    }
    for (int i=h*m;i<n*m;i++) {
        int y=*b[vp[i].S.F].begin();
        ans[vp[i].S.F][vp[i].S.S]=y;
        s[y]++;
        b[vp[i].S.F].erase(y);
        if (s[y]==n) {
            for (int j=0;j<n;j++) {
                if (b[j].count(y)) {
                    b[j].erase(y);
                }
            }
        }
    }
    allocate_tickets(ans);
    return a;
}
#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...