Submission #1313732

#TimeUsernameProblemLanguageResultExecution timeMemory
1313732BigBadBullyCarnival Tickets (IOI20_tickets)C++20
100 / 100
1139 ms132960 KiB
#include "tickets.h" #include <bits/stdc++.h> #define int long long #define pii pair<int,int> #define ff first #define ss second using namespace std; long long find_maximum(signed k, vector<vector<signed>> v) { int n = v.size(); int m = v[0].size(); for(auto&vec:v) sort(vec.begin(),vec.end()); vector<vector<signed>> answer(n,vector<signed>(m,-1)); vector<int> plus(n,0); int ans = 0; priority_queue<pii> pq; for(int i = 0; i < n; i++) for(int j = 0; j+m-k < m; j++) pq.push({v[i][j]+v[i][j+m-k],i}),ans+=-v[i][j]; { int cnt = 0; while (cnt < n * k / 2) { pii x = pq.top(); pq.pop(); cnt++; plus[x.ss]++; ans += x.ff; } } vector<int> sz(k,0); set<int> free; for(int i = 0; i < k; i++) free.insert(i); vector<set<int>> has(k); for(int i = 0; i< n; i++) { int j = 0; vector<int> iter; for(int x : free) iter.push_back(x); sort(iter.begin(),iter.end(),[&](int a,int b){return sz[a]<sz[b];}); for(int x : iter) { if(j >= k-plus[i]) break; answer[i][j] = x; sz[x]++; has[x].insert(i); j++; } set<int> neu; for(int x :free) if(sz[x]<n/2) neu.insert(x); free = neu; } for(int i = 0; i < k; i++) free.insert(i); for(int i = 0; i< n; i++) { int j = m-plus[i]; vector<int> iter; for(int x : free) iter.push_back(x); sort(iter.begin(),iter.end(),[&](int a,int b){return sz[a]<sz[b];}); for(int x : iter) { if(has[x].count(i))continue; if(j>=m) break; answer[i][j] = x; sz[x]++; j++; } set<int> neu; for(int x :free) if(sz[x]<n) neu.insert(x); free = neu; } allocate_tickets(answer); 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...