제출 #1163965

#제출 시각아이디문제언어결과실행 시간메모리
1163965AlgorithmWarrior카니발 티켓 (IOI20_tickets)C++20
27 / 100
395 ms61284 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; vector<vector<int>>answer; vector<deque<int>>mat; vector<int>st; vector<int>dr; long long alege(int id){ int n=mat.size(); vector<bool>ans(n,0); int i,j; long long rasp=0; for(i=0;i<n;++i){ int cntm=0,cntM=0; long long summ=0,sumM=0; long long summij=0; vector<pair<int,int>>mij; vector<bool>util(n,1); util[i]=0; for(j=0;j<n;++j) if(i!=j){ if(mat[j].back()<mat[i][0]){ ++cntm; summ+=mat[i][0]-mat[j][0]; util[j]=0; } else if(mat[i][0]<mat[j][0]){ ++cntM; sumM+=mat[j].back()-mat[i][0]; } else{ summij+=mat[j].back()-mat[i][0]; mij.push_back({mat[j][0]+mat[j].back(),j}); } } if(cntm<n/2 && cntM<=n/2){ sort(mij.begin(),mij.end()); summij+=summ+sumM; int alegem=n/2-1-cntm; for(j=0;j<alegem;++j){ summij+=2*mat[i][0]-mij[j].first; util[mij[j].second]=0; } if(rasp<summij){ rasp=summij; ans=util; } } } for(i=0;i<n;++i) if(ans[i]){ answer[i][dr[i]]=id; dr[i]--; mat[i].pop_back(); } else{ answer[i][st[i]]=id; st[i]++; mat[i].pop_front(); } return rasp; } long long find_maximum(int k,vector<vector<int>>x){ int n = x.size(); int m = x[0].size(); st.resize(n,0); dr.resize(n,m-1); int i,j; long long sum=0; for(i=0;i<n;++i){ vector<int>row; deque<int>deq; for(j=0;j<m;++j){ row.push_back(-1); deq.push_back(x[i][j]); } answer.push_back(row); mat.push_back(deq); } for(i=0;i<k;++i) sum+=alege(i); allocate_tickets(answer); return sum; }
#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...