Submission #141219

#TimeUsernameProblemLanguageResultExecution timeMemory
141219Ruxandra985Hokej (COCI17_hokej)C++14
72 / 120
228 ms17068 KiB
#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)

hokej.cpp: In function 'int main()':
hokej.cpp:85:11: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf ("%d%d",&m,&n);
     ~~~~~~^~~~~~~~~~~~~~
hokej.cpp:87:15: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf ("%d%d",&v[i].first , &v[i].second.first);
         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hokej.cpp:106:10: warning: 'poz' may be used uninitialized in this function [-Wmaybe-uninitialized]
     solve(poz);
     ~~~~~^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...