Submission #1060260

#TimeUsernameProblemLanguageResultExecution timeMemory
1060260idasCarnival Tickets (IOI20_tickets)C++17
100 / 100
565 ms93720 KiB
#include "bits/stdc++.h"
#include "tickets.h"

#define FOR(i, begin, end) for(int i=(begin); i<(end); i++)
#define sz(x) ((int)(x).size())
#define pb push_back
#define s second
#define f first

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;

const int N=1510;
int n, m, label[N][N];

long long find_maximum(int k, std::vector<std::vector<int>> x) {
    n=sz(x); m=sz(x[0]);
    ll ans=0;
    vector<pair<int,pair<int,pii>>> gain;
    FOR(i, 0, n) {
        for(int j=k-1; j>=0; j--) {
            label[i][j]=-1;
            ans-=x[i][j];
            int r=m-k+j, val=x[i][j]+x[i][r];
            gain.pb({val,{i,{j,r}}});
        }
    }
    sort(gain.begin(), gain.end());
    reverse(gain.begin(), gain.end());
    FOR(i, 0, n*k/2) {
        int val=gain[i].f, x=gain[i].s.f, y=gain[i].s.s.f, z=gain[i].s.s.s;
        label[x][y]=0; label[x][z]=1;
        ans+=val;
    }
    vector b(n, vector(m, -1));
    int in=0;
    FOR(i, 0, n) {
        int now=in;
        FOR(j, 0, m) {
            if(label[i][j]==-1) b[i][j]=now++, in=now%k;
            if(label[i][j]==1) b[i][j]=now++;
            now%=k;
        }
    }
    allocate_tickets(b);
    return ans;
}
/*
2 3 3
0 2 5
1 1 3

4 2 1
5 9
1 4
3 6
2 7

4 4 1
0 1 2 9
4 4 4 5
3 3 3 7
3 4 4 4

4 2 1
0 10
1 5
0 6
0 6

4 4 1
0 1 2 9
7 7 7 7
7 7 7 7
7 7 7 7

8 2 1
1 9
0 10
2 3
3 4
6 8
1 5
0 2
3 4

4 3 2
0 1 1
1 1 1
0 0 1
0 0 0

4 2 2
0 1
0 1
0 0
1 1

4 2 1
0 1
0 0
0 0
1 1

4 3 2
0 0 0
0 1 1
0 1 1
1 1 1
*/
#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...