제출 #819671

#제출 시각아이디문제언어결과실행 시간메모리
819671Abrar_Al_Samit카니발 티켓 (IOI20_tickets)C++17
27 / 100
508 ms73136 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; const int nax = 1500; int val[nax][2], n, m; int best[nax]; long long mx_ans = 0; void solve(int med) { int cur[nax]; long long ret = 0; int rit_cnt = 0; vector<pair<int,int>>del; for(int i=0; i<n; ++i) { if(val[i][0] > med) { cur[i] = 1; ret += val[i][1] - med; ++rit_cnt; } else if(val[i][1] < med) { cur[i] = 0; ret += med - val[i][0]; } else { cur[i] = 0; del.emplace_back((val[i][1]-med) - (med-val[i][0]), i); ret += med - val[i][0]; } } if(rit_cnt * 2 > n) return; sort(del.rbegin(), del.rend()); for(auto [d, i] : del) { if(rit_cnt * 2 == n) break; ++rit_cnt; ret += d; cur[i] = 1; } if(rit_cnt * 2 != n) return; if(ret > mx_ans) { mx_ans = ret; for(int i=0; i<n; ++i) { best[i] = cur[i]; } } } long long find_maximum(int k, vector<vector<int>> x) { n = x.size(); m = x[0].size(); for(int i=0; i<n; ++i) { val[i][0] = 2e9, val[i][1] = -1; for(int j=0; j<m; ++j) { val[i][0] = min(val[i][0], x[i][j]); val[i][1] = max(val[i][1], x[i][j]); } } for(int i=0; i<n; ++i) { solve(val[i][0]); solve(val[i][1]); } vector<vector<int>> ans(n, vector<int>(m, -1)); for(int i=0; i<n; ++i) { for(int j=0; j<m; ++j) { if(val[i][best[i]]==x[i][j]) { ans[i][j] = 0; break; } } } allocate_tickets(ans); return mx_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...