Submission #141235

#TimeUsernameProblemLanguageResultExecution timeMemory
141235Ruxandra985Hokej (COCI17_hokej)C++14
120 / 120
213 ms6480 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]; int last[7],ok[10]; int cmp2 (idk x, idk y){ if (x.time != y.time) return x.time < y.time; else return x.idx < y.idx; } int next (int start){ while (ok[start]) start++; return start; } int main() { //freopen ("a.in" , "r" , stdin); //freopen ("a.out" , "w" , stdout); int sum, elem,start,i,n,m; 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); sum = 0; score = 0; start = 1; ok[1] = 1; elem = 0; for (i=1 ; i<=n ; i++){ if (v[i].second.first == m){ //printf ("%d\n",v[i].second.second); if (!sum){ score = score + (long long)v[i].first * v[i].second.first; elem++; changes[elem].time = 0; /// dupa sum minute changes[elem].idx = v[i].second.second; /// pe asta il pui changes[elem].col = start; ok[start] = 1; start=next(start); if (start == 7) break; continue; } else if (next(start)<=6){ score = score + (long long)v[i].first * v[i].second.first; elem++; changes[elem].time = 0; /// dupa sum minute changes[elem].idx = v[i].second.second; /// pe asta il pui changes[elem].col = next(start); ok[next(start)] = 1; continue; } else v[i].second.first--; } score = score + (long long)v[i].first * min ( v[i].second.first , m - sum); if (sum + min ( v[i].second.first , m - sum) == m){ elem++; changes[elem].time = sum; /// dupa sum minute changes[elem].idx = v[i].second.second; /// pe asta il pui changes[elem].col = start; /// din v[i], in start pui doar m - sum start=next(start); ok[start] = 1; if (start == 7) break; v[i].second.first -= min ( v[i].second.first , m - sum); sum = 0; if (v[i].second.first) i--; } else { elem++; changes[elem].time = sum; /// dupa sum minute changes[elem].idx = v[i].second.second; /// pe asta il pui changes[elem].col = start; /// pe coloana start, ai jucatorul i fully int ant = v[i].second.first; v[i].second.first -= min ( v[i].second.first , m - sum); sum = sum + min ( ant , m - sum); } } 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:32: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:34: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);
         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...