Submission #1239865

#TimeUsernameProblemLanguageResultExecution timeMemory
1239865MuhammadSaramCarnival Tickets (IOI20_tickets)C++20
100 / 100
2663 ms142440 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define all(v) v.begin(), v.end() const ll inf = -1e18; vector<vector<int>> construct(vector<vector<int>> a,int k) { int n=a.size(), m=a[0].size(); deque<int> v[n]; vector<pair<int,int>> mod; int ind[n]; for (int i=0;i<n;i++) { ind[i]=m-1; deque<int> d; for (int j=0;j<k;j++) d.push_back(a[i][j]); for (int j=m-1;j>=m-k;j--) mod.push_back({a[i][j]+a[i][k-(m-j)],i}); reverse(all(d)); v[i]=d; } sort(all(mod)); for (int ct=0;ct<n/2*k;ct++) { pair<int,int> p=mod.back();mod.pop_back(); v[p.second].pop_front(); v[p.second].push_back(a[p.second][ind[p.second]--]); } vector<vector<int>> ans; for (int i=0;i<n;i++) { vector<int> v1; for (int j:v[i]) v1.push_back(j); sort(all(v1)); ans.push_back(v1); } return ans; } long long find_maximum(int k, vector<vector<int>> a) { int n=a.size(), m=a[0].size(); a=construct(a,k); vector<int> val; multiset<int> se1,se2; ll ans=0; for (int i=0;i<n;i++) for (int j:a[i]) val.push_back(j),ans+=j; sort(all(val)); for (int i=0;i<n*k;i++) if (i<n*k/2) se1.insert(val[i]),ans-=val[i]*2; else se2.insert(val[i]); int id[n][2], cnt[n]={}; for (int i=0;i<n;i++) { id[i][0]=0, id[i][1]=m-1; for (int j=k-1;j>=0;j--) { auto it=se1.find(a[i][j]); if (it!=se1.end()) se1.erase(it); else cnt[i]++, se2.erase(se2.find(a[i][j])); } } priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> se; vector<vector<int>> v(n, vector<int>(m,-1)); for (int r=0;r<k;r++) { for (int i=0;i<n;i++) se.push({cnt[i],i}); for (int i=0;i<n;i++) { pair<int,int> p=se.top();se.pop(); if (i<n/2) v[p.second][id[p.second][0]++]=r; else v[p.second][id[p.second][1]--]=r, cnt[p.second]--; } } allocate_tickets(v); 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...