제출 #320750

#제출 시각아이디문제언어결과실행 시간메모리
320750MiricaMatei카니발 티켓 (IOI20_tickets)C++14
100 / 100
963 ms98460 KiB
#include <bits/stdc++.h> #include "tickets.h" using namespace std; const int MAXN = 1505; struct Srt { int s; int i, j; bool operator <(const Srt& other) const { return s < other.s; } }; int l[MAXN], r[MAXN]; /*void allocate_tickets(vector<vector<int> >v) { for (auto it1:v) { for (auto it2:it1) cout << it2 << ' '; cout << '\n'; } }*/ long long find_maximum(int k, vector<vector<int> >v) { int n = v.size(); int m = v[0].size(); vector<vector<int> >s; vector<int>aux(m, -1); for (int i = 0; i < n; ++i) { s.push_back(aux); r[i] = m - 1; } vector<Srt>srt; long long ans = 0; for (int i = 0; i < n; ++i) { for (int j = r[i]; j >= r[i] - k + 1; --j) ans += v[i][j]; r[i] = r[i] - k + 1; for (int j = 0; j + m - k < m; ++j) srt.push_back({v[i][j] + v[i][j + m - k], i, j}); } sort(srt.begin(), srt.end()); for (int i = 0; i < n * k / 2; ++i) { ans -= srt[i].s; r[srt[i].i]++; l[srt[i].i]++; } vector<int>vis(n); while (k--) { int pl = n / 2, mn = n / 2; for (int i = 0; i < n; ++i) { if (l[i] == 0) { pl--; s[i][r[i]] = k; r[i]++; vis[i] = 1; } else if (r[i] == m) { mn--; l[i]--; s[i][l[i]] = k; vis[i] = 1; } } for (int i = 0; i < n; ++i) { if (vis[i]) { vis[i] = 0; continue; } if (mn && l[i]) { mn--; l[i]--; s[i][l[i]] = k; } else { pl--; s[i][r[i]] = k; r[i]++; } } } allocate_tickets(s); return ans; } /*int main() { freopen("date.in", "r", stdin); freopen("date.out", "w", stdout); int n, m, k; cin >> n >> m >> k; vector<vector<int> >v; for (int i = 0; i < n; ++i) { vector<int>g(m); for (int j = 0; j < m; ++j) cin >> g[j]; v.push_back(g); } cout << find_maximum(k, v); return 0; }*/
#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...