제출 #808227

#제출 시각아이디문제언어결과실행 시간메모리
808227drdilyor카니발 티켓 (IOI20_tickets)C++17
25 / 100
625 ms80076 KiB
#include<bits/stdc++.h> #include "tickets.h" using namespace std; using ll = long long; const int inf = 1e9; #define debug(args...) cout << "[" << #args << "]: "; debug_out(args...); void debug_out() { cout << endl; } template<typename H, typename... T> void debug_out(H h, T... t) { cout << h << ", "; debug_out(t...); } long long find_maximum(int k, std::vector<std::vector<int>> x) { int n = x.size(); int m = x[0].size(); assert(m == k); vector<tuple<int,int,int>> big; big.reserve(n * m); for (int i = 0; i < n; i++) { for (int j = 0; j < m;j++) big.push_back({x[i][j], i, j}); } stable_sort(big.begin(), big.end()); vector low(n, vector<int>(m, 0)); for (int i = 0; i < n * m / 2; i++) { low[get<1>(big[i])][get<2>(big[i])] = 1; } ll sum = 0; vector ans(n, vector<int>(m, 0)); int round_low = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (low[i][j]) { sum -= x[i][j]; ans[i][j] = round_low++; if (round_low >= m) round_low -= m; } } int round = round_low; for (int j = 0; j < m; j++) { if (!low[i][j]) { sum += x[i][j]; ans[i][j] = round++; if (round >= m) round -= m; } } } allocate_tickets(ans); return sum; }
#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...