제출 #421405

#제출 시각아이디문제언어결과실행 시간메모리
421405Mazaalai카니발 티켓 (IOI20_tickets)C++17
11 / 100
353 ms55152 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair <ll, int> PII; #define ff first #define ss second long long find_maximum(int k1, vector <vector <int> > x) { ll n = x.size(); ll m = x[0].size(); ll k = k1; vector <vector <int> > answer(n, vector <int>(m, -1)); vector <vector <bool> > state(n, vector <bool>(m, 0)); // vector <vector <ll> > x(n, vector<ll>(m)); // for (int i = 0; i < n; i++) // for (int j = 0; j < m; j++) x[i][j] = x1[i][j]; vector <ll> hiIdx(n+5, m-1); vector <ll> loIdx(n+5, k-1); // number picked : n * k -> + (n/2*k)(-), (n/2*k)(+) set <PII> dif; // val, line ll ans = 0, half = n * k / 2; for (int i = 0; i < n; i++) { for (int j = 0; j < k; j++) { state[i][j] = 1; ans -= x[i][j]; } dif.insert({-x[i][k-1]-x[i][m-1], i}); } // cout << "here\n"; for (int i = 0; i < half; i++) { // n*m*log(n*m) auto el = dif.begin(); dif.erase(el); int a, b; tie(a, b) = *el; ans -= a; state[b][loIdx[b]--] = 0; state[b][hiIdx[b]--] = 1; dif.insert({-x[b][loIdx[b]]-x[b][hiIdx[b]], b}); } for (int i = 0; i < n; i++) { int cur = 0; for (int j = 0; j < m; j++) { if (state[i][j]) answer[i][j] = cur++; } } allocate_tickets(answer); return 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...