제출 #518409

#제출 시각아이디문제언어결과실행 시간메모리
518409Plurm카니발 티켓 (IOI20_tickets)C++17
16 / 100
2095 ms73192 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; long long find_maximum(int k, vector<vector<int>> x) { int n = x.size(); int m = x[0].size(); vector<vector<int>> answer; for (int i = 0; i < n; i++) { vector<int> row(m); for (int j = 0; j < m; j++) { row[j] = -1; } answer.push_back(row); } long long ans = 0ll; for(int t = 0; t < k; t++){ for(int i = 0; i < n; i++){ int mxcol = -1; int mx = -1; for(int j = 0; j < m; j++){ if(answer[i][j] == -1 && x[i][j] > mx){ mx = x[i][j]; mxcol = j; } } answer[i][mxcol] = t; ans += mx; //cout << t << " add " << mx << endl; } set<int> remrows; for(int rem = 0; rem < n/2; rem++){ int mndiff = 2e9+1; int mxdiffrow = -1; for(int i = 0; i < n; i++){ if(remrows.count(i) == 0){ int mx = -1; int mn = 1e9+1; for(int j = 0; j < m; j++){ if(answer[i][j] == -1 && x[i][j] < mn){ mn = x[i][j]; }else if(answer[i][j] == t){ mx = x[i][j]; } } if(mx + mn < mndiff){ mndiff = mx + mn; mxdiffrow = i; } } } remrows.insert(mxdiffrow); int mxcol = -1; int mncol = -1; int mn = 1e9+1; for(int j = 0; j < m; j++){ if(answer[mxdiffrow][j] == -1 && x[mxdiffrow][j] < mn){ mn = x[mxdiffrow][j]; mncol = j; }else if(answer[mxdiffrow][j] == t){ mxcol = j; } } answer[mxdiffrow][mxcol] = -1; answer[mxdiffrow][mncol] = t; ans -= mndiff; //cout << t << " rem " << rem << " : " << mndiff << endl; } } 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...