제출 #1292122

#제출 시각아이디문제언어결과실행 시간메모리
1292122lambd47카니발 티켓 (IOI20_tickets)C++20
100 / 100
555 ms79884 KiB
#include<bits/stdc++.h> #include "tickets.h" using namespace std; #define ll long long #define L(i,j,k) for(int i=(j);i<=(k);i++) #define R(i,j,k) for(int i=(j);i>=(k);i--) #define sz(v) ((int)(v).size()) #define all(v) (v).begin(),(v).end() long long find_maximum(int k, std::vector<std::vector<int>> x) { int n = x.size(); int m = x[0].size(); vector<vector<int>> answer(n,vector<int>(m,-1)); priority_queue<array<ll,2>> pos;//,vector<array<int,3>>,greater<array<int,3>>> pos; priority_queue<array<ll,2>> neg;//,vector<array<int,3>>,greater<array<int,3>>> pos; vector<int> cnt(n,0); L(i,0,n-1){ if(i%2){ L(j,0,k-1){ cnt[i]++; neg.push({x[i][j]+x[i][j+m-1-k+1],i}); } } else{ R(j,m-1,m-1-k+1){ pos.push({-x[i][j]-x[i][j-m+k],i}); } } } while(sz(neg) && sz(pos) && (neg.top()[0]+pos.top()[0])>0){ auto [v,i]=neg.top(); auto [v2,i2]=pos.top(); pos.pop(); neg.pop(); cnt[i]--; cnt[i2]++; } vector<int> l(n,0); vector<int> r(n,m-1); ll resp=0; L(i,0,k-1){ vector<int> ordat(n);iota(all(ordat),0); sort(all(ordat),[&](int a, int b){ return cnt[a]>cnt[b]; }); L(j,0,n/2-1){ cnt[ordat[j]]--; resp-=x[ordat[j]][l[ordat[j]]]; answer[ordat[j]][l[ordat[j]]]=i; l[ordat[j]]++; } L(j,n/2,n-1){ answer[ordat[j]][r[ordat[j]]]=i; resp+=x[ordat[j]][r[ordat[j]]]; r[ordat[j]]--; } } allocate_tickets(answer); return resp; }
#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...