Submission #1204740

#TimeUsernameProblemLanguageResultExecution timeMemory
1204740simona1230Dungeons Game (IOI21_dungeons)C++20
13 / 100
379 ms154060 KiB
#include "dungeons.h" #include <bits/stdc++.h> using namespace std; const int maxn=5*1e4+5; const int logg=30; int n; vector<int> s,p,w,l,h; vector<long long> v; long long sum[maxn][32][8]; int ver[maxn][32][8]; void init(int N, std::vector<int> S, std::vector<int> P, std::vector<int> W, std::vector<int> L) { n=N; s=S; p=P; w=W; l=L; h=s; sort(h.begin(),h.end()); v= {h[0]}; for(int i=1; i<h.size(); i++) if(h[i]!=h[i-1])v.push_back(h[i]); v.push_back(1e18); for(int num=0; num<v.size(); num++) { //cout<<v[num]<<"!!"<<endl; for(int i=0;i<n;i++) { if(v[num]>s[i]) { ver[i][0][num]=w[i]; sum[i][0][num]=s[i]; } else { ver[i][0][num]=l[i]; sum[i][0][num]=p[i]; } } ver[n][0][num]=n; for(int j=1; j<=logg; j++) for(int i=0; i<=n; i++) { sum[i][j][num]=sum[i][j-1][num]+sum[ver[i][j-1][num]][j-1][num]; if(1e18-sum[i][j-1][num]<sum[ver[i][j-1][num]][j-1][num])sum[i][j][num]=1e18; ver[i][j][num]=ver[ver[i][j-1][num]][j-1][num]; //cout<<ver[i][j][num]<<" "<<i<<" "<<(1<<j)<<endl; } } //cout<<v.size()<<endl; return; } long long simulate(int x, int zz) { long long z=zz; int num=0; while(num<v.size()&&z>=v[num])num++; while(num<v.size()) { //cout<<x<<" "<<z<<" "<<v[num]<<endl; for(int j=logg;j>=0;j--) { if(z+sum[x][j][num]<v[num]) { z+=sum[x][j][num]; x=ver[x][j][num]; } } if(x==n)return z; z+=sum[x][0][num]; x=ver[x][0][num]; num++; } 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...