Submission #1221587

#TimeUsernameProblemLanguageResultExecution timeMemory
1221587MalixCarnival Tickets (IOI20_tickets)C++20
100 / 100
1456 ms168708 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vii; typedef pair<int,int> pi; typedef vector<pi> pii; typedef tuple<int,int,int> ti; typedef vector<ll> li; typedef vector<li> lii; #define REP(i,a,b) for(int i=a;i<b;i++) #define F first #define S second #define PB push_back #define LSOne(s) ((s)&(-s)) #define all(x) x.begin(),x.end() ll INF=1000000000000000010; int inf=1e9+10; ll M=1e9+7; long long find_maximum(int k, std::vector<std::vector<int>> X) { int n = X.size(); int m = X[0].size(); vii a(n,vi(m,-1)); int x=k*n; ll ans=0; vi cnt(n,0); priority_queue<pair<ll,int>> pq; vector<vector<pi>> arr(n); REP(i,0,n)REP(j,0,m)arr[i].PB({X[i][j],j}); REP(i,0,n)sort(all(arr[i])); REP(i,0,n)REP(j,0,k){ ans-=arr[i][j].F; pq.push({(ll)arr[i][j].F+(ll)arr[i][m-k+j].F,i}); } REP(i,0,x/2){ auto [y,z]=pq.top(); pq.pop(); ans+=y; cnt[z]++; } vii mx(n),mn(n); REP(i,0,n){ REP(j,0,cnt[i])mx[i].PB(arr[i][m-1-j].S); REP(j,0,k-cnt[i])mn[i].PB(arr[i][j].S); } vector<set<int>> st(n); REP(i,0,k){ priority_queue<pi> p; REP(j,0,n)if(cnt[j])p.push({cnt[j],j}); REP(j,0,n/2){ int y=p.top().S; p.pop(); cnt[y]--; a[y][mx[y].back()]=i; st[y].insert(i); mx[y].pop_back(); } } REP(i,0,n){ int ps=0; for(auto u:mn[i]){ while(st[i].count(ps))ps++; a[i][u]=ps++; } } allocate_tickets(a); return ans; }
#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...