제출 #305769

#제출 시각아이디문제언어결과실행 시간메모리
305769bruce_test카니발 티켓 (IOI20_tickets)C++14
100 / 100
1071 ms62500 KiB
#include <bits/stdc++.h> using namespace std; #define f first #define s second #define lc (rt<<1) #define rc (rt<<1|1) #define pb push_back #define cl(a, b) memset(a, b, sizeof(a)) typedef long long ll; typedef pair<int, int> pi; typedef pair<int, pi> pii; typedef vector<int> vi; typedef vector<pi> vii; typedef vector<pii> viii; const int inf = 0x3F3F3F3F; const ll infl = 0x3F3F3F3F3F3F3F3FLL; const int mod = 1e9 + 7; void allocate_tickets(vector<vi> s); ll find_maximum(int k, vector<vi> x){ int n = x.size(), m = x[0].size(); ll ans = 0; vector<vi> s(n, vi(m, -1)); vi f(n, 0), r(n, k-1); vector<pi> p; for(int i=0; i<n; i++){ for(int j=0; j<k; j++){ ans -= x[i][j]; p.pb({x[i][j] + x[i][m-k+j], i}); } } sort(p.begin(), p.end(), greater<pi>()); for(int i=0, tot=n*k/2; i<tot; i++){ ans += p[i].f; f[p[i].s]++; r[p[i].s]--; } for(int i=0, cnt=0; i<k; i++, cnt=0){ for(int j=0; j<n; j++){ if(!f[j]) { s[j][r[j]] = i; r[j]--; } else if(r[j] == -1) { s[j][m - f[j]] = i; f[j]--; cnt++; } } for(int j=0; j<n; j++){ if(f[j] && r[j]!=-1){ if(cnt < n/2) { s[j][m - f[j]] = i; f[j]--; cnt++; } else { s[j][r[j]] = i; r[j]--; } } } } allocate_tickets(s); return ans; } //void allocate_tickets(vector<vi> s){ // for(int i=0; i<s.size(); i++){ // for(int x: s[i]) cout << x << " "; // cout << endl; // } //} //int main(){ // vector<vi> a = {{5, 9}, {1, 4}, {3, 6}, {2, 7}}; // cout << find_maximum(1, a) << endl; //}
#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...