Submission #1270814

#TimeUsernameProblemLanguageResultExecution timeMemory
1270814abdelhakim카니발 티켓 (IOI20_tickets)C++20
25 / 100
514 ms92832 KiB
#include "tickets.h" #include <bits/stdc++.h> #define dbg(x) cerr<<#x<<' '<<x<<endl; #define ll long long using namespace std; void printvec(vector<ll>& vec) { for (auto &&e : vec) { cout << e << ' '; } cout << endl; } long long find_maximum(int k, std::vector<std::vector<int>> x) { int n = x.size(); int m = x[0].size(); ll ans=0; vector<ll> small(n); vector<ll> big(n,k); vector<pair<ll,ll>> v; vector<pair<ll,ll>> fe(n,{0,m-1}); vector<vector<int>> anss(n,vector<int>(m,-1)); for (int i=0;i<n;i++) { for (int j=m-1;j>=m-k;j--) { ans+=x[i][j]; } for (int j=0;j<m;j++) { ll val=x[i][j]+x[i][m-k+j]; v.push_back({val,i}); } } sort(v.begin(), v.end()); for (int i=0;i<n/2*k;i++) { small[v[i].second]++; big[v[i].second]--; ans-=v[i].first; } for (int i=0;i<k;i++) { vector<ll> vec(n); iota(vec.begin(),vec.end(),0); sort(vec.begin(), vec.end(), [&](ll ind1, ll ind2){return big[ind1] > big[ind2];}); for (int j=0;j<n;j++) { if(j<n/2) { big[vec[j]]--; anss[vec[j]][fe[vec[j]].second]=i; fe[vec[j]].second--; } else { small[vec[j]]++; anss[vec[j]][fe[vec[j]].first]=i; fe[vec[j]].first++; } } } allocate_tickets(anss); 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...