| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1292119 | lambd47 | Carnival Tickets (IOI20_tickets) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
#include "tickets.h"
using namespace std;
#define ll long long
#define L(i,j,k) for(int i=(j);i<=(k);i++)
#define R(i,j,k) for(int i=(j);i>=(k);i--)
#define sz(v) ((int)(v).size())
#define all(v) (v).begin(),(v).end()
long long find_maximum(int k, std::vector<std::vector<int>> x) {
int n = x.size();
int m = x[0].size();
vector<vector<int>> answer(n,vector<int>(m,-1));
priority_queue<array<ll,2>> pos;//,vector<array<int,3>>,greater<array<int,3>>> pos;
vector<int> cnt(n,0);
L(i,0,n-1){
if(i%2){
L(j,0,k-1){
cnt[i]++;
neg.push({x[i][j]+x[i][j+m-1-k+1],i});
}
}
else{
R(j,m-1,m-1-k+1){
pos.push({-x[i][j]-x[i][j-m+k],i});
}
}
}
while(sz(neg) && sz(pos) && (neg.top()[0]+pos.top()[0])>0){
auto [v,i]=neg.top();
auto [v2,i2]=pos.top();
pos.pop();
neg.pop();
cnt[i]--;
cnt[i2]++;
}
vector<int> l(n,0);
vector<int> r(n,m-1);
L(i,0,k-1){
vector<int> ordat(n);iota(all(ordat),0);
sort(all(ordat),[&](int a, int b){
return cnt[a]>cnt[b];
});
L(j,0,n/2-1){
cnt[ordat[j]]--;
resp-=x[ordat[j]][l[ordat[j]]];
answer[ordat[j]][l[ordat[j]]]=i;
l[ordat[j]]++;
}
L(j,n/2,n-1){
answer[ordat[j]][r[ordat[j]]]=i;
resp+=x[ordat[j]][r[ordat[j]]];
r[ordat[j]]--;
}
}
allocate_tickets(answer);
return resp;
}
