Submission #819828

#TimeUsernameProblemLanguageResultExecution timeMemory
819828alvingogoDungeons Game (IOI21_dungeons)C++17
100 / 100
4735 ms1910200 KiB
#include "dungeons.h" #include <bits/stdc++.h> #define fs first #define sc second #define p_q priority_queue using namespace std; const int A=25; const int B=10; typedef long long ll; struct xe{ int to; ll cost=0; ll mx=0; }; struct no{ xe as[A]; }; vector<vector<no> > f; vector<int> s,p,w,l; vector<int> bs; int n; void init(int N, vector<int> S, vector<int> P, vector<int> W, vector<int> L) { n=N; s=S; p=P; w=W; l=L; const int C=9e7+5; for(int h=1,z=0;h<C;h*=B,z++){ bs.push_back(h); f.push_back(vector<no>(n+1)); for(int i=0;i<n;i++){ if(h>=s[i]){ f[z][i].as[0].to=w[i]; f[z][i].as[0].cost=s[i]; f[z][i].as[0].mx=1e18; } else{ f[z][i].as[0].to=l[i]; f[z][i].as[0].cost=p[i]; f[z][i].as[0].mx=s[i]; } } for(int i=1;i<A;i++){ for(int j=0;j<n;j++){ auto a=f[z][j].as[i-1],b=f[z][f[z][j].as[i-1].to].as[i-1]; if(a.to==n){ f[z][j].as[i]=a; } else{ f[z][j].as[i].to=b.to; f[z][j].as[i].cost=a.cost+b.cost; f[z][j].as[i].mx=min(a.mx,b.mx-a.cost); } } } } bs.push_back(8*(9e7+5)); return; } ll simulate(int x, int Z) { long long z=Z; for(int j=0;j<f.size();j++){ while(z<bs[j+1]){ for(int i=A-1;i>=0;i--){ if(z<f[j][x].as[i].mx){ z+=f[j][x].as[i].cost; x=f[j][x].as[i].to; if(x==n){ return z; } } } if(z>=s[x]){ z+=s[x]; x=w[x]; } else{ z+=p[x]; x=l[x]; } if(x==n){ return z; } } } return z; }

Compilation message (stderr)

dungeons.cpp: In function 'll simulate(int, int)':
dungeons.cpp:65:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<no> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |  for(int j=0;j<f.size();j++){
      |              ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...