Submission #425080

#TimeUsernameProblemLanguageResultExecution timeMemory
425080MlxaCarnival Tickets (IOI20_tickets)C++14
11 / 100
2 ms716 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define all(x) x.begin(), x.end() #define mp make_pair #define mt make_tuple #define x first #define y second #include "tickets.h" #include <vector> const int N = 2000; int cnt[N], lef[N], rig[N]; ll find_maximum(int k, vector<vector<int>> x) { int n = (int)x.size(); int m = (int)x[0].size(); vector<vector<int>> answer(n, vector<int>(m, -1)); int ones = 0; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cnt[i] += x[i][j] == 1; ones += x[i][j] == 1; } } fill_n(lef, n, 0); fill_n(rig, n, m - 1); vector<int> rows(n); iota(all(rows), 0); for (int i = 0; i < k; ++i) { sort(all(rows), [&](int ii, int jj) { return cnt[ii] < cnt[jj]; }); for (int j = 0; j < n / 2; ++j) { answer[rows[j]][lef[j]++] = i; } for (int j = n / 2; j < n; ++j) { answer[rows[j]][rig[j]--] = i; } } vector<vector<int>> res(k); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { // cout << answer[i][j] << " "; if (answer[i][j] != -1) { res[answer[i][j]].push_back(x[i][j]); } } // cout << endl; } ll sum = 0; for (int i = 0; i < k; ++i) { sort(all(res[i])); assert((int)res[i].size() == n); for (int j = 0; j < n / 2; ++j) { sum += res[i][n - 1 - j] - res[i][j]; } } allocate_tickets(answer); return sum; } #ifdef LC #include "grader.cpp" #endif
#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...