Submission #1241612

#TimeUsernameProblemLanguageResultExecution timeMemory
1241612Younis_DwaiDungeons Game (IOI21_dungeons)C++20
0 / 100
90 ms55624 KiB
#include "dungeons.h" #include <vector> #include <bits/stdc++.h> #define ll long long using namespace std; const int N=4e5+5; long long sz,S[N],P[N],W[N],L[N],Sum[N][26],nxt[N][26],mx[N][26],d[N],nxt2[N][26],Sum2[N][26]; long long Add(long long x , long long y){ x+=y; if(x<=-1e17) x=-1e17; return x; } void init(int n, std::vector<int> s, std::vector<int> p, std::vector<int> w, std::vector<int> l){ sz=n; for(int i=1;i<=n;i++){ S[i]=s[i-1]; P[i]=p[i-1]; W[i]=w[i-1]; L[i]=l[i-1]; W[i]++; L[i]++; } S[n+1]=0; L[n+1]=W[n+1]=1; for(int j=0;j<=25;j++){ nxt[n+1][j]=n+1; mx[n+1][j]=1e18; Sum[n+1][j]=0; nxt2[n+1][j]=n+1; Sum2[n+1][j]=-1e17; } for(int i=1;i<=n;i++){ nxt[i][0]=W[i]; Sum[i][0]=S[i]; mx[i][0]=S[i]; nxt2[i][0]=L[i]; Sum2[i][0]=P[i]; } for(int j=1;j<=25;j++){ for(int i=1;i<=n+1;i++){ nxt[i][j]=nxt[nxt[i][j-1]][j-1]; Sum[i][j]=Add(Sum[i][j-1],Sum[nxt[i][j-1]][j-1]); mx[i][j]=max(mx[i][j-1],mx[nxt[i][j-1]][j-1]); Sum2[i][j]=Add(Sum2[i][j-1],Sum2[nxt2[i][j-1]][j-1]); nxt2[i][j]=nxt2[nxt2[i][j-1]][j-1]; } } d[n+1]=0; for(int i=n;i>=1;i--){ d[i]=1+d[W[i]]; } return ; } long long simulate(int x, int z){ ++x; long long power=z; if(power>=S[x]){ //cout<<" $ $ $ "<<endl; for(int j=25;j>=0;j--){ if((1<<j)>d[x]) continue ; power+=Sum[x][j]; x=nxt[x][j]; //cout<<" # "<<x<<' '<<j<<' '<<power<<endl; } } else{ //cout<<" # # # "<<endl; for(int j=25;j>=0;j--){ if(Sum2[x][j]<0 || power+Sum2[x][j]>=S[x]) continue ; power+=Sum2[x][j]; x=nxt2[x][j]; } power+=P[x]; x=L[x]; //cout<<" $ "<<x<<' '<<power<<endl; for(int j=25;j>=0;j--){ if((1<<j)>d[x]) continue ; power+=Sum[x][j]; x=nxt[x][j]; } } return power; }
#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...