제출 #586450

#제출 시각아이디문제언어결과실행 시간메모리
586450Drew_카니발 티켓 (IOI20_tickets)C++17
25 / 100
890 ms106016 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define f1 first #define s2 second using ii = pair<int, int>; using ll = long long; ll find_maximum(int K, vector<vector<int>> V) { int N = (int)V.size(), M = (int)V[0].size(); ll sum = 0; vector<vector<int>> ans(N, vector<int> (M, -1)); vector<array<int, 3>> vec; for (int i = 0; i < N; ++i) for (int j = 0; j < M; ++j) vec.pb({V[i][j], i, j}), sum += V[i][j]; sort(vec.begin(), vec.end()); vector<vector<int>> low(N), high(N); // i: color // no same color can be on same contest i.e. ans[i] cannot contain two same integers for (int i = 0; i < N*M/2; ++i) { sum -= 2 * vec[i][0]; low[vec[i][1]].pb(vec[i][2]); } for (int i = N*M/2; i < N*M; ++i) high[vec[i][1]].pb(vec[i][2]); vector<vector<bool>> used(N, vector<bool>(M, false)); for (int i = 0, ctr = 0; i < N; ++i) { for (int j : low[i]) { ans[i][j] = ctr; used[i][ctr] = true; ctr = (ctr + 1) % M; } } for (int i = 0; i < N; ++i) { for (int j = 0, k = 0; j < M; ++j) { if (ans[i][j] == -1) { while (used[i][k]) ++k; ans[i][j] = k++; } } } 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...