제출 #136883

#제출 시각아이디문제언어결과실행 시간메모리
136883mariusnicoliHokej (COCI17_hokej)C++14
36 / 120
517 ms13024 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<int> Start; long long change, start, n, m, rest, lin, col, i, j, sol, last; long long cmp(const player &a, const player &b) { if (a.value != b.value) return a.value > b.value; else return a.resistence > b.resistence; } long long 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"; } **/ for (i=1;i<=6;i++) { if (v[i].resistence < m) { break; } Start.push_back(v[i].position); sol += v[i].value * m; } rest = 6*m - (i-1)*m; last = -1; col = 1; for (j=i;j<=n;j++) { if (rest == 0) break; if (v[j].resistence == m) { if (rest >= v[j].resistence) { sol += m*v[j].value; rest -= m; Start.push_front(v[j].position); 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[++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.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...