Submission #520204

#TimeUsernameProblemLanguageResultExecution timeMemory
520204A_DDungeons Game (IOI21_dungeons)C++17
0 / 100
7056 ms120024 KiB
#include "dungeons.h" #include <bits/stdc++.h> using namespace std; const int N=4e5+100; const int L=25; long long st[N][L][6]; long long we[N][L][6]; set<long long> stt; vector<long long> vec; int sz; int nnn; void init(int nn,vector<int> s,vector<int> p,vector<int> w,vector<int> l){ nnn=nn; for(auto x:s){ stt.insert(x); } vec.push_back(0); for(auto x:stt)vec.push_back(x); vec.push_back(1e18); sz=vec.size(); for(int k=0;k<sz-1;k++){ // cout<<k<<" "<<vec[k]<<endl; for(int i=0;i<nnn;i++){ if(vec[k]>=s[i]){ st[i][0][k]=w[i]; we[i][0][k]=s[i]; } else{ st[i][0][k]=l[i]; we[i][0][k]=p[i]; } // cout<<st[i][0][k]<<" "; } // cout<<nnn<<" "; // cout<<endl; st[nnn][0][k]=nnn; for(int j=1;j<L;j++){ for(int i=0;i<=nnn;i++){ st[i][j][k]=st[st[i][j-1][k]][j-1][k]; we[i][j][k]=we[i][j-1][k]+we[st[i][j-1][k]][j-1][k]; // cout<<st[i][j][k]<<" "; } // cout<<endl; } // cout<<endl; } } long long simulate(int xx, int zz){ long long x=xx; long long z=zz; /* for(int k=0;k<sz-1;k++){ for(int i=0;i<=nnn;i++){ cout<<we[i][0][k]<<" "; } cout<<endl; } cout<<x<<" "<<z<<endl; */ for(int k=0;k<sz-1;k++){ if(vec[k+1]<=z)continue; for(int j=0;j>=0;){ long long nx=st[x][j][k]; long long nz=z+we[x][j][k]; if(nx!=nnn&&nz<vec[k+1]){ // cout<<x<<" "<<k<<" "<<we[x][j][k]<<" "<<z<<" "<<nz<<endl; x=nx; z=nz; // cout<<x<<" "<<z<<endl; } else{ break; } } if(x!=nnn&&z<vec[k+1]){ // cout<<x<<" "<<k<<" "<<we[x][0][k]<<" "<<z<<" "<<z+we[k][0][k]<<endl; z=z+we[x][0][k]; x=st[x][0][k]; //cout<<x<<" "<<z<<endl; } } return z; }
#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...