제출 #1050493

#제출 시각아이디문제언어결과실행 시간메모리
1050493noyancanturk카니발 티켓 (IOI20_tickets)C++17
27 / 100
353 ms51584 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; #define pb push_back using lint=long long; using pii=pair<int,int>; long long find_maximum(int k, std::vector<std::vector<int>> x) { int n = x.size(); int m = x[0].size(); std::vector<std::vector<int>> answer; for(int i=0;i<n;i++){ answer.pb(vector<int>(m,-1)); } if(k==1){ int mini[n]{},maxi[n]{}; vector<int>vals; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(x[i][j]<x[i][mini[i]])mini[i]=j; if(x[i][j]>x[i][maxi[i]])maxi[i]=j; } vals.pb(x[i][mini[i]]); vals.pb(x[i][maxi[i]]); } lint ans=0; vector<int>choices; for(int med:vals){ lint cur=0; int cnt=0; vector<int>curchoice(n); vector<pii>des; for(int i=0;i<n;i++){ if(med<x[i][mini[i]]){ cur+=abs(med-x[i][maxi[i]]); //cerr<<x[i][maxi[i]]<<" maxi?\n";; curchoice[i]=1; cnt++; } else if(x[i][maxi[i]]<=med){ cur+=abs(med-x[i][mini[i]]); curchoice[i]=0; cnt--; }else{ //cerr<<i<<" is choice\n"; cur+=abs(med-x[i][mini[i]]); des.pb({abs(med-x[i][maxi[i]])-abs(med-x[i][mini[i]]),i}); } } if(des.size()<abs(cnt)){ continue; } sort(des.begin(),des.end()); int l=0,r=des.size()-1; //cerr<<med<<" :: "<<cur<<"\n"; while(l<=r){ if(cnt<0){ cur+=des[r].first; cnt++; curchoice[des[r].second]=1; r--; }else{ //cur+=des[l].first; cnt--; curchoice[des[l].second]=0; l++; } } if(ans<cur){ ans=cur; //cerr<<med<<" is chosen\n"; choices=curchoice; } } for(int i=0;i<n;i++){ answer[i][choices[i]==1?maxi[i]:mini[i]]=0; } allocate_tickets(answer); return ans; } return -1; }
#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...