Submission #1239618

#TimeUsernameProblemLanguageResultExecution timeMemory
1239618Muhammad_AneeqCarnival Tickets (IOI20_tickets)C++17
0 / 100
325 ms52732 KiB
#include "tickets.h" #include <vector> #include <queue> #include <iostream> #include <algorithm> using namespace std; #define ll long long int const N=1510; ll mul(ll a,ll b) { return a*b; } long long find_maximum(int k, vector<vector<int>> a) { int n = a.size(); int m = a[0].size(); long long ans=0; int l[n],r[n]; int pos[n]={}; int vl[n]={}; for (int i=0;i<n;i++) l[i]=0,r[i]=m-1; vector<pair<ll,int>>pq; vector<vector<int>>ret(n,vector<int>(m,-1)); int sz=n/2; for (int index=0;index<k;index++) { pq={}; ll sm=0; for (int i=0;i<n;i++) sm+=a[i][r[i]]; ll temp=ans; ans=0; ll ind1=0; ll cur=0; for (int j=0;j<n;j++) pq.push_back({a[j][l[j]]+a[j][r[j]],j}); sort(begin(pq),end(pq)); for (int j=0;j<n;j++) { vl[pq[j].second]=j; if (j<sz-1) cur+=pq[j].first; } for (int i=0;i<n;i++) { pq={}; sm-=a[i][r[i]]; if (vl[i]<sz-1) { cur-=pq[vl[i]].first; cur+=pq[sz-1].first; } int ind=-1; for (int j:{l[i],r[i]}) { ll an=sm-mul(a[i][j],n-1)-(cur-mul(2,mul(sz-1,a[i][j]))); if (an>=ans) { ans=an; ind=j; } } if (ind!=-1) ind1=i; sm+=a[i][r[i]]; if (vl[i]<sz-1) { cur+=pq[vl[i]].first; cur-=pq[sz-1].first; } } { sm-=a[ind1][r[ind1]]; if (vl[ind1]<sz-1) { cur+=pq[vl[ind1]].first; cur-=pq[sz-1].first; } int ind=-1; for (int j:{l[ind1],r[ind1]}) { ll an=sm-mul(a[ind1][j],n-1)-(cur-mul(2,mul(sz-1,a[ind1][j]))); if (an>=ans) { ans=an; ind=j; } } for (int j=0;j<n;j++) pos[j]=1; if (l[ind1]==ind) pos[ind1]=0; else pos[ind1]=1; for (int j=0;j<sz-1+(vl[ind1]<sz-1);j++) { if (vl[ind1]==j) continue; pos[pq[j].second]=0; } } ans=temp+ans; for (int j=0;j<n;j++) { if (pos[j]) { ret[j][r[j]]=index; r[j]--; } else { ret[j][l[j]]=index; l[j]++; } } } allocate_tickets(ret); 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...