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>
using namespace std;
#define forint(i, N) for (int i = 0; i < (N); i++)
using namespace std;
void allocate_tickets(vector< vector<int> > s);
long long find_maximum1(int k, vector< vector<int> > x) {
int n = x.size();
int m = x[0].size();
vector< vector<int> > s(n, vector<int>(m, -1));
vector<int> min_index(n, 0);
vector<int> max_index(n, m-1);
vector<pair<long long, int>> increase(n);
long long total = 0;
forint(i, k) {
forint(j, n) {
increase[j].first = x[j][min_index[j]] + x[j][max_index[j]];
increase[j].second = j;
}
nth_element(increase.begin(), increase.begin() + n/2, increase.end());
// first half is negative
for (int j = 0; j < n/2; j++) {
total -= x[increase[j].second][min_index[increase[j].second]];
s[increase[j].second][min_index[increase[j].second]] = i;
min_index[increase[j].second]++;
}
// second half is positive
for (int j = n/2; j < n; j++) {
total += x[increase[j].second][max_index[increase[j].second]];
s[increase[j].second][max_index[increase[j].second]] = i;
max_index[increase[j].second]--;
}
//cerr << total << "--" << endl;
}
allocate_tickets(s);
return total;
}
long long find_maximum(int k, vector< vector<int> > x) {
int n = x.size();
int m = x[0].size();
vector< vector<int> > s(n, vector<int>(m, -1));
vector<int> min_index(n, k-1);
vector<int> max_index(n, m-1);
vector<pair<long long, int>> increase(n);
long long total = 0;
forint(i, k) {
forint(j, n) {
increase[j].first = x[j][min_index[j]] + x[j][max_index[j]];
increase[j].second = j;
}
nth_element(increase.begin(), increase.begin() + n/2, increase.end());
for (int j = n/2; j < n; j++) {
max_index[increase[j].second]--;
min_index[increase[j].second]--;
}
}
forint(i, k) {
forint(j, n) {
increase[j].first = max_index[j];
increase[j].second = j;
}
nth_element(increase.begin(), increase.begin() + n/2, increase.end());
for (int j = 0; j < n/2; j++) {
max_index[increase[j].second]++;
total += x[increase[j].second][max_index[increase[j].second]];
s[increase[j].second][max_index[increase[j].second]] = i;
}
for (int j = n/2; j < n; j++) {
total -= x[increase[j].second][min_index[increase[j].second]];
s[increase[j].second][min_index[increase[j].second]] = i;
min_index[increase[j].second]--;
}
}
allocate_tickets(s);
return total;
}
# | 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... |