# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
141219 | Ruxandra985 | Hokej (COCI17_hokej) | C++14 | 228 ms | 17068 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],w[DIMN];
int last[7],elem,n,m;
int full[10];
int cmp2 (idk x, idk y){
if (x.time != y.time)
return x.time < y.time;
else return x.idx < y.idx;
}
long long solve (int x){ /// x sunt clar pline
int i,luat,sum,start;
long long score;
for (i=1;i<=n;i++)
w[i] = v[i];
luat = 0;
sum = 0;
score = 0;
start = 1;
elem = 0;
for (i=1;i<=x;i++){
score = score + (long long)m * w[full[i]].first;
elem++;
changes[elem].time = 0; /// dupa sum minute
changes[elem].idx = w[full[i]].second.second; /// pe asta il pui
changes[elem].col = i;
}
for (i=1 ; i<=n ; i++){
if (w[i].second.first == m){
if (luat >= x)
w[i].second.first--;
else {
luat++;
continue;
}
}
score = score + (long long)w[i].first * min ( w[i].second.first , m - sum);
if (sum + min ( w[i].second.first , m - sum) == m){
elem++;
changes[elem].time = sum; /// dupa sum minute
changes[elem].idx = w[i].second.second; /// pe asta il pui
changes[elem].col = start;
/// din w[i], in start pui doar m - sum
start++;
if (start == 6-x+1)
break;
w[i].second.first -= min ( w[i].second.first , m - sum);
sum = 0;
if (w[i].second.first)
i--;
}
else {
elem++;
changes[elem].time = sum; /// dupa sum minute
changes[elem].idx = w[i].second.second; /// pe asta il pui
changes[elem].col = start;
/// pe coloana start, ai jucatorul i fully
int ant = w[i].second.first;
w[i].second.first -= min ( w[i].second.first , m - sum);
sum = sum + min ( ant , m - sum);
}
if (start == 6-x+1)
break;
}
return score;
}
int main()
{
//freopen ("a.in" , "r" , stdin);
//freopen ("a.out" , "w" , stdout);
int i,poz;
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);
int y = 0;
for (i=1;i<=n;i++){
if (v[i].second.first == m)
full[++y] = i;
if (y==6)
break;
}
score = 0;
for (i=0;i<=6;i++){ /// daca i sunt full
long long aux = solve (i);
if (score < aux){
score = aux;
poz = i;
}
}
solve(poz);
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... |