# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
80285 | wjoao | Hokej (COCI17_hokej) | C++11 | 405 ms | 13104 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>
#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].k*(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 << " Com capacidade " << capacidade << 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;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |