# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
80284 | wjoao | Hokej (COCI17_hokej) | C++11 | 411 ms | 13128 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#define int long long
#define pii pair<int, int>
using namespace std;
struct V{
int k, e, id;
V(int _a, int _b, int _c){k = _a; e = _b; id = _c; }
bool operator<(V &v2){
return k > v2.k;
}
};
struct OP{
int tempo, id1, id2;
OP(int _t, int _id1, int _id2){tempo = _t; id1 = _id1; id2 = _id2; }
bool operator<( OP &op2){
return tempo < op2.tempo;
}
};
vector< V > v;
vector< pii > t;
vector< OP > r;
int n, m, k, e, ini[6];
main(){
cin >> m >> n;
for(int i = 1; i <= n; i++){
cin >> k >> e;
v.push_back(V(k,e, i));
}
sort(v.begin(), v.end());
int total = 0;
int res_total = 0;
for(int i = 0; i < v.size(); i++){
if(total + v[i].e > m*6){
res_total += v[i].e*(m*6-total);
t.push_back(make_pair(m*6-total, v[i].id));
break;
}
total += v[i].e;
res_total += v[i].e*v[i].k;
t.push_back(make_pair(v[i].e, v[i].id));
if(total == m*6) break;
}
sort(t.begin(), t.end());
reverse(t.begin(), t.end());
ini[0] = t[0].second;
int capacidade = t[0].first;
int atual = 0;
for(int i = 1; i < t.size(); i++){
int last_id = t[i-1].second;
if( capacidade == m ){
atual++;
capacidade = t[i].first;
ini[atual] = t[i].second;
//cout << "Começando o " << atual << " Com o : " << t[i].second << endl;
} else if( capacidade + t[i].first <= m ){
r.push_back(OP(capacidade, last_id, t[i].second));
capacidade += t[i].first;
//cout << "Adicionando o " << t[i].second << " No fim do atual: " << atual << endl;
} else {
r.push_back(OP(capacidade, last_id, t[i].second));
capacidade = t[i].first - (m-capacidade);
atual++;
ini[atual] = t[i].second;
//cout << "Adicionaodo o " << t[i].second << " No fim do atual: " << atual-1 << endl;
//cout << "Começando o " << atual << " Com o : " << t[i].second << endl;
}
}
sort(r.begin(), r.end());
cout << res_total << endl;
for(int i = 0; i < 6; i++){
if( i > 0 ) cout << " ";
cout << ini[i];
}
cout << endl << r.size() << endl;
for(int i = 0; i < r.size(); i++){
cout << r[i].tempo << " " << r[i].id1 << " " << r[i].id2 << endl;
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |