Submission #136569

#TimeUsernameProblemLanguageResultExecution timeMemory
136569mariusnicoliHokej (COCI17_hokej)C++14
0 / 120
564 ms6552 KiB
#include <iostream> #include <algorithm> using namespace std; struct player { int value; int resistence; int position; }; struct ch { int minute; int enter; int exit; }; player v[500010]; ch Change[1000001]; int Start[7]; int change, start, n, m, rest, lin, col, i, j, sol, last; int cmp(const player &a, const player &b) { if (a.value != b.value) return a.value > b.value; else return a.resistence > b.resistence; } int cmp1(const ch &a, const ch &b) { return a.minute < b.minute; } int main () { cin>>m>>n; for (i=1;i<=n;i++) { cin>>v[i].value>>v[i].resistence; v[i].position = i; } sort(v+1, v+n+1, cmp); /** for (i=1;i<=n;i++) { cout<<v[i].value<<" "<<v[i].resistence<<"\n"; } **/ for (i=1;i<=6;i++) { if (v[i].resistence < m) { break; } Start[i] = v[i].position; start = i; sol += v[i].value * m; } rest = 6*m - (i-1)*m; last = -1; col = 1; for (j=i;j<=n;j++) { if (col == 1) { start++; Start[start] = v[j].position; } if (last != -1) { Change[++change].minute = col; Change[change].enter = v[j].position; Change[change].exit = last; } last = v[j].position; if (rest <= v[j].resistence) { sol += rest * v[j].value; break; }else { if (col + v[j].resistence <= m) { col += v[j].resistence; } else if (col + v[j].resistence == m+1) { last =-1; col = 1; } else { Start[++start] = v[j].position; col = v[j].resistence - (m-col); } rest -= v[j].resistence; sol += v[j].resistence * v[j].value; } } sort(Change+1, Change+change+1, cmp1); cout<<sol<<"\n"; for (i=1;i<=6;i++) cout<<Start[i]<<" "; cout<<"\n"; cout<<change<<"\n"; for (i=1;i<=change;i++) cout<<Change[i].minute-1<<" "<<Change[i].enter<<" "<<Change[i].exit<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...