# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
74546 | ZZangZZang | Hokej (COCI17_hokej) | C++17 | 184 ms | 6832 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>
#include <cstring>
#include <functional>
#include <string>
using namespace std;
struct Player {
int idx, K, I;
bool operator<(Player const& rhs) const {
return K > rhs.K;
}
} pls[500000];
struct Subst {
int X, A, B;
Subst(int X, int A, int B) : X(X), A(A), B(B) {}
bool operator<(Subst const& rhs) const {
return X < rhs.X;
}
};
int M, N;
int main()
{
int i, j;
scanf("%d%d", &M, &N);
for(int i=0; i<N; ++i) {
int K, I;
scanf("%d %d", &K, &I);
pls[i].idx = i+1;
pls[i].K = K;
pls[i].I = I;
}
sort(pls, pls+N);
long long Z = 0LL;
vector<int> starters;
vector<Subst> substs;
int remI = pls[0].I;
i=0;
for(int _=0; _<6; ++_) {
int lastidx = pls[i].idx;
starters.push_back(lastidx);
int tm = remI;
if(tm > M) tm = M;
Z += 1LL*tm*pls[i].K;
j=i;
int I, K, curidx;
I = tm;
while(tm < M) {
++j;
I = pls[j].I;
K = pls[j].K;
int curidx = pls[j].idx;
if(I > M-tm) I = M-tm;
substs.push_back(Subst(tm, lastidx, curidx));
Z += 1LL*I*K;
tm += I;
lastidx = curidx;
}
remI = pls[j].I - I;
if(remI == 0) {
++j;
remI = pls[j].I;
}
i = j;
}
printf("%lld\n", Z);
for(i=0; i<6; ++i) {
printf("%d ", starters[i]);
}
puts("");
sort(substs.begin(), substs.end());
int sz = substs.size();
printf("%d\n", sz);
for(i=0; i<sz; ++i) {
int X, A, B;
X = substs[i].X;
A = substs[i].A;
B = substs[i].B;
printf("%d %d %d\n", X, A, B);
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |