제출 #1179173

#제출 시각아이디문제언어결과실행 시간메모리
1179173PacybwoahCarnival Tickets (IOI20_tickets)C++20
27 / 100
430 ms69064 KiB
#include "tickets.h" #include <vector> #include<iostream> #include<algorithm> #include<utility> using namespace std; typedef long long ll; long long find_maximum(int k, std::vector<std::vector<int>> xx) { int n = (int)xx.size(); int m = (int)xx[0].size(); vector<vector<ll>> vec(n, vector<ll>(m)); vector<vector<int>> ans(n, vector<int>(m, -1)); for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) vec[i][j] = xx[i][j]; if(m == 1){ vector<ll> srtd; for(int i = 0; i < n; i++) ans[i][0] = 0, srtd.push_back(vec[i][0]); sort(srtd.begin(), srtd.end()); ll sum = 0; for(int i = 0; i < n / 2; i++) sum += srtd[n - 1 - i] - srtd[i]; allocate_tickets(ans); return sum; } if(k == 1){ ll anss = -1; for(int ti = 0; ti < n; ti++){ for(int tj = 0; tj < 2; tj++){ ll num; if(tj == 0) num = vec[ti][0]; else num = vec[ti][m - 1]; vector<int> a, b; vector<pair<ll, int>> ca, cb; ll sum = 0; for(int i = 0; i < n; i++){ if(vec[i][m - 1] < num){ a.emplace_back(i); } else if(vec[i][0] > num){ b.emplace_back(i); } else{ ll cl = num - vec[i][0], cr = vec[i][m - 1] - num; if(cl > cr){ a.emplace_back(i); ca.emplace_back(cl - cr, i); } else{ b.emplace_back(i); cb.emplace_back(cr - cl, i); } } } if((int)a.size() + (int)cb.size() < n / 2) continue; if((int)b.size() + (int)ca.size() < n / 2) continue; for(auto &x: a){ sum += num - vec[x][0]; } for(auto &x: b){ sum += vec[x][m - 1] - num; } if((int)a.size() > n / 2){ sort(ca.begin(), ca.end()); int sz = (int)a.size(); for(int i = 0; i < sz - n / 2; i++) sum -= ca[i].first; } if((int)b.size() > n / 2){ sort(cb.begin(), cb.end()); int sz = (int)b.size(); for(int i = 0; i < sz - n / 2; i++) sum -= cb[i].first; } if(sum > anss){ anss = sum; vector<int> whch(n, 1); if((int)a.size() <= n / 2){ for(auto &x: a) whch[x] = 0; int sz = (int)a.size(); for(int i = 0; i < n / 2 - sz; i++) whch[cb[i].second] = 0; } else{ for(auto &x: a) whch[x] = 0; int sz = (int)a.size(); for(int i = 0; i < sz - n / 2; i++) whch[ca[i].second] = 1; } for(int i = 0; i < n; i++){ ans[i][0] = -1; ans[i][m - 1] = -1; if(whch[i] == 0) ans[i][0] = 0; else ans[i][m - 1] = 0; } } } } allocate_tickets(ans); return anss; } return 1; } // g++ -std=c++17 -Wall -Wextra -Wshadow -fsanitize=undefined -fsanitize=address -o run -g grader.cpp tickets.cpp
#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...