Submission #136895

#TimeUsernameProblemLanguageResultExecution timeMemory
136895mariusnicoliHokej (COCI17_hokej)C++14
120 / 120
549 ms13984 KiB
#include <iostream> #include <algorithm> #include <deque> using namespace std; struct player { long long value; long long resistence; long long position; }; struct ch { long long minute; long long enter; long long exit; }; player v[500010]; ch Change[1000001]; deque<long long> Start; long long 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<<" "<<v[i].position<<"\n"; } **/ rest = 6*m; col = 1; last = -1; for (j=1;j<=n;j++) { if (v[j].resistence == m) { if (rest >= m) { Start.push_front(v[j].position); rest -= m; sol += v[j].value * m; if (rest == 0) break; else continue; } } if (col == 1) { Start.push_back(v[j].position); } if (col != 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.push_back(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.front()<<" "; Start.pop_front(); } cout<<"\n"; cout<<change<<"\n"; for (i=1;i<=change;i++) cout<<Change[i].minute-1<<" "<<Change[i].exit<<" "<<Change[i].enter<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...