#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |