이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "tickets.h"
using namespace std;
using ll = long long;
ll find_maximum(int K, vector<vector<int>> X) {
int N = X.size(), M=X[0].size();
vector<int> T(N), L(N);
priority_queue<pair<int, int>> pq;
for (int i=0; i<N; i++) pq.emplace(X[i][M-1]+X[i][K-1], i);
for (int i=0; i<K*N/2; i++) {
int j=pq.top().second;
pq.pop();
T[j]++;
if (T[j]<K)
pq.emplace(X[j][M-1-T[j]]+X[j][K-1-T[j]], i);
}
vector<vector<int>> A;
while (pq.size()) pq.pop();
for (int i=0; i<N; i++)
A.emplace_back(vector<int>(M, -1)),
pq.emplace(T[i], i);
int mx=0, mn=(1e9);
for (int i=0; i<N; i++) {
if (T[i]<K) mx=max(mx, X[i][K-T[i]-1]);
if (T[i]) mn=min(mn, X[i][M-T[i]]);
}
assert(mx<=mn);
ll R=0;
for (int i=0; i<K; i++) {
vector<int> S;
for (int j=0; j<N/2; j++) S.emplace_back(pq.top().second), pq.pop();
sort(S.begin(), S.end());
for (int j=0, k=0; j<N; j++) {
if (k<N/2&&j==S[k]) {
L[j]++;
A[j][M-L[j]]=i;
R+=X[j][M-L[j]];
pq.emplace(T[j]-L[j], j);
k++;
}
else A[j][i-L[j]]=i, R-=X[j][i-L[j]];
}
}
allocate_tickets(A);
return R;
}
# | 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... |