Submission #1205266

#TimeUsernameProblemLanguageResultExecution timeMemory
1205266simona1230Dungeons Game (IOI21_dungeons)C++20
25 / 100
7100 ms191364 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; int c,done[maxn]; long long sum[maxn][32][10]; int ver[maxn][32][10]; int construct(long long x) { if(done[x])return done[x]; c++; done[x]=c; x=v[x]; for(int i=0; i<n; i++) { if(x>s[i]) { ver[i][0][c]=w[i]; sum[i][0][c]=s[i]; } else { ver[i][0][c]=l[i]; sum[i][0][c]=p[i]; } } ver[n][0][c]=n; for(int j=1; j<=logg; j++) for(int i=0; i<=n; i++) { sum[i][j][c]=sum[i][j-1][c]+sum[ver[i][j-1][c]][j-1][c]; if(1e18-sum[i][j-1][c]<sum[ver[i][j-1][c]][j-1][c])sum[i][j][c]=1e18; ver[i][j][c]=ver[ver[i][j-1][c]][j-1][c]; //cout<<ver[i][j][num]<<" "<<i<<" "<<(1<<j)<<endl; } return c; } 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); return; } long long simulate(int x, int zz) { long long z=zz; long long num=0; while(num<v.size()&&x!=n) { while(num<v.size()&&z>=v[num])num++; //cout<<x<<" "<<z<<" "<<v[num]<<endl; int i=construct(num); for(int j=logg;j>=0;j--) { if(z<v[num]-sum[x][j][i]) { z+=sum[x][j][i]; x=ver[x][j][i]; } } if(x==n)return z; z+=sum[x][0][i]; x=ver[x][0][i]; } return z; } /*int main() { while(1) { int nn=100; vector<int> ss,pp,ww,ll; int r=1e7; for(int i=0;i<nn;i++) ss.push_back(r); for(int i=0;i<nn;i++) pp.push_back(rand()%10); for(int i=0;i<nn;i++) ww.push_back(min(nn,rand()%2+1+i)); for(int i=0;i<nn;i++) ll.push_back(rand()%(nn+1)); init(nn,ss,pp,ww,ll); cout<<nn<<" "<<5<<endl; for(int i=0;i<ss.size();i++) cout<<ss[i]<<" "; cout<<endl; for(int i=0;i<pp.size();i++) cout<<pp[i]<<" "; cout<<endl; for(int i=0;i<ww.size();i++) cout<<ww[i]<<" "; cout<<endl; for(int i=0;i<ll.size();i++) cout<<ll[i]<<" "; cout<<endl; for(int i=1;i<=5;i++) { int xx,zz; xx=rand()%nn; zz=rand()%10; cout<<xx<<" "<<zz<<endl; cout<<simulate(xx,zz)<<endl; } } }*/
#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...