# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
141184 | Ruxandra985 | Hokej (COCI17_hokej) | C++14 | 211 ms | 11204 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 <cstdio>
#include <algorithm>
#define DIMN 500010
using namespace std;
int cmp (pair <int , pair <int,int> > x , pair <int , pair <int,int> > y){
if (x.first != y.first)
return x.first > y.first;
return x.second.first < y.second.first;
}
struct idk{
int time,idx,col;
} changes[4*DIMN];
pair <int, pair <int,int> > v[DIMN];
int last[7];
int cmp2 (idk x, idk y){
if (x.time != y.time)
return x.time < y.time;
else return x.idx < y.idx;
}
int main()
{
//FILE *fin = fopen ("a.in","r");
//FILE *fout = fopen ("a.out","w");
int sum, elem,start,i,n,m;
long long score;
scanf ("%d%d",&m,&n);
for (i=1;i<=n;i++){
scanf ("%d%d",&v[i].first , &v[i].second.first);
v[i].second.second = i;
}
sort (v+1 , v + n + 1,cmp);
sum = 0;
score = 0;
start = 1;
elem = 0;
for (i=1 ; i<=n ; i++){
score = score + v[i].first * min ( v[i].second.first , m - sum);
if (sum + min ( v[i].second.first , m - sum) == m){
if (min ( v[i].second.first , m - sum) == m - sum){
elem++;
changes[elem].time = sum; /// dupa sum minute
changes[elem].idx = v[i].second.second; /// pe asta il pui
changes[elem].col = start;
/// din v[i], in start pui doar m - sum
}
start++;
if (start == 7)
break;
v[i].second.first -= min ( v[i].second.first , m - sum);
sum = 0;
if (v[i].second.first)
i--;
}
else {
elem++;
changes[elem].time = sum; /// dupa sum minute
changes[elem].idx = v[i].second.second; /// pe asta il pui
changes[elem].col = start;
/// pe coloana start, ai jucatorul i fully
int ant = v[i].second.first;
v[i].second.first -= min ( v[i].second.first , m - sum);
sum = sum + min ( ant , m - sum);
}
}
printf ("%lld\n",score);
sort (changes+1 , changes + elem + 1, cmp2);
int ok = 0;
for (i=1;i<=elem;i++){
if (changes[i].time == 0){ /// jucator initial
printf ("%d ",changes[i].idx);
last[changes[i].col] = changes[i].idx;
ok++;
if (ok == 6){
printf ("\n%d\n",elem-6);
}
}
else {
printf ("%d %d %d\n",changes[i].time , last[changes[i].col] , changes[i].idx);
last[changes[i].col] = changes[i].idx;
}
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |