Submission #437798

#TimeUsernameProblemLanguageResultExecution timeMemory
437798yiqilim5438Dungeons Game (IOI21_dungeons)C++17
13 / 100
5332 ms5100 KiB
#include<bits/stdc++.h> #include"dungeons.h" using namespace std; typedef long long ll; typedef pair<ll,ll> pll; int n; int INF = 1e7+10; vector<int>s,p,w,l; vector<ll>wins(5e4+5,0ll); vector<pll>ls(5e4+5); vector<ll>dt(5e4+5,INF); 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; for(int i = n-1;i>=0;i--){ wins[i] = s[i]+wins[w[i]]; } for(int i = 0;i<n;i++){ int x = i; for(int j = 1;j<=4000;j++){ dt[i] = min(dt[i],s[x]-ls[i].first); ls[i].first += p[x]; x = l[x]; ls[i].second = x; if(x==n){ls[i].first = INF;dt[i]=0;break;} } } }; ll simulate(int x,int z){ if(z>=s[x]){ return z+wins[x]; } else{ bool ok = 0; if(z>=dt[x]) ok = 1; if(ok){ while(true){ if(x==n) return z; else if(z>=s[x]) return z+wins[x]; z += p[x]; x = l[x]; } } else{ z += ls[x].first; x = ls[x].second; return simulate(x,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...