제출 #1062909

#제출 시각아이디문제언어결과실행 시간메모리
1062909jamjanek카니발 티켓 (IOI20_tickets)C++14
27 / 100
343 ms51308 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; void usun(vector<int>&ile, set<pair<int, int>>&ilejedynek, int x){ pair<int,int> it = {ile[x], x}; ilejedynek.erase(it); ile[it.second]--; ilejedynek.insert({it.first-1, it.second}); } long long find_maximum(int k, std::vector<std::vector<int>> x) { int n = x.size(); int m = x[0].size(); int i, j; vector<vector<int>>answer = x; for(i=0;i<n;i++) for(j=0;j<m;j++) answer[i][j] = -1; long long wynik = 0; for(int war=0;war<k;war++){ vector<pair<long long, int>>srednie; vector<int>pozmini(n), pozmaxi(n); for(i=0;i<n;i++){ int mini = 1000000010, maxi = -1000000010; for(j=0;j<m;j++) if(x[i][j]!=-1) mini = min(mini, x[i][j]), maxi = max(maxi, x[i][j]); for(j=0;j<m;j++){ if(mini==x[i][j]) pozmini[i] = j; if(maxi==x[i][j]) pozmaxi[i] = j; } srednie.push_back({(long long)mini+maxi, i}); } sort(srednie.begin(), srednie.end()); for(i=0;i<n;i++){ int j = srednie[i].second; if(i<n/2){ answer[j][pozmini[j]] = 0; wynik-=x[j][pozmini[j]]; x[j][pozmini[j]] = -1; } else{ answer[j][pozmaxi[j]] = 0; wynik+=x[j][pozmaxi[j]]; x[j][pozmini[j]] = -1; } } } allocate_tickets(answer); return wynik; }
#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...