# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
415913 | abdzag | Carnival Tickets (IOI20_tickets) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
//#include "tickets.h"
#define rep(i,a,b) for(int i=int(a);i<int(b);i++)
#define rrep(i,a,b) for(int i=int(a);i>int(b);i--)
#define trav(a,v) for(auto& a: v)
#define sz(v) v.size()
#define all(v) v.begin(),v.end()
#define vi vector<int>
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const long long inf = 1e15;
using namespace std;
vector<bool> visited(1e6);
vector<vector<ll>> g;
vector<ll> v;
ll curr = 0;
bool done = 1;
void allocate_tickets(vector<vector<int>> answer) {
trav(a, answer) {
trav(b, a) {
cout << b << " ";
}
cout << endl;
}
}
long long find_maximum(int k, std::vector<std::vector<int>> x) {
vector<ll> v;
ll n = x.size();
ll m = x[0].size();
ll ans = 0;
std::vector<std::vector<int>> answer(x.size(),vector<int>(x[0].size(),-1));
set<pair<ll, pair<ll, ll>>> greatest;
set<pair<ll, pair<ll, ll>>> smallest;
vector<bool> visited(n);
rep(i, 0, k) {
visited.clear();
v.clear();
visited.resize(n, 0);
smallest.clear();
greatest.clear();
rep(j, 0, n) {
rep(z, 0, m) {
if (x[j][z] != -1) {
smallest.emplace(x[j][z], make_pair(j, z));
break;
}
}
rrep(z, m-1, -1) {
if (x[j][z] != -1) {
greatest.emplace(-x[j][z], make_pair(j, z));
break;
}
}
}
ll counter = 0;
trav(a, smallest) {
x[a.second.first][a.second.second] = -1;
answer[a.second.first][a.second.second] = i;
visited[a.second.first] = 1;
v.push_back(a.first);
counter++;
if (counter == n / 2)break;
}
counter = 0;
trav(a, greatest) {
if (!visited[a.second.first]) {
answer[a.second.first][a.second.second] = i;
x[a.second.first][a.second.second] = -1;
v.push_back(-a.first);
counter++;
}
if (counter == n / 2)break;
}
sort(all(v));
ll b = v[v.size() / 2];
trav(a, v) {
ans += abs(a - b);
}
}
allocate_tickets(answer);
return ans;
}