Submission #437647

#TimeUsernameProblemLanguageResultExecution timeMemory
437647PajarajaDungeons Game (IOI21_dungeons)C++17
100 / 100
4953 ms868536 KiB
#include "dungeons.h" #include <bits/stdc++.h> #define MAXN 400007 #define MAXL 25 #define MAXK 4 using namespace std; vector<int> s,p,w,l,g[MAXN],we[MAXN]; long long sum[MAXK][MAXL][MAXN],mn[MAXK][MAXL][MAXN],add[MAXN],stp[10]; int pr[MAXK][MAXL][MAXN],n; void dfs(int s,long long a) { add[s]=a; for(int i=0;i<g[s].size();i++) dfs(g[s][i],a+we[s][i]); } 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; w.push_back(n); l.push_back(n); s.push_back(0); p.push_back(0); stp[0]=1; for(int i=1;i<10;i++) stp[i]=stp[i-1]*57; for(int k=0;k<MAXK;k++) { int st=stp[k]; for(int i=0;i<n;i++) { if(s[i]<=st) {pr[k][0][i]=w[i]; sum[k][0][i]=s[i]; mn[k][0][i]=1000000000000000000LL;} else {pr[k][0][i]=l[i]; sum[k][0][i]=p[i]; mn[k][0][i]=s[i];} } pr[k][0][n]=n; sum[k][0][n]=0; mn[k][0][n]=1000000000000000000LL; for(int j=1;j<MAXL;j++) for(int i=0;i<=n;i++) { pr[k][j][i]=pr[k][j-1][pr[k][j-1][i]]; sum[k][j][i]=sum[k][j-1][i]+sum[k][j-1][pr[k][j-1][i]]; if(sum[k][j][i]>1000000000000000000LL) sum[k][j][i]=1000000000000000000LL; mn[k][j][i]=min(mn[k][j-1][i],mn[k][j-1][pr[k][j-1][i]]-sum[k][j-1][i]); } } for(int i=0;i<n;i++) {g[w[i]].push_back(i); we[w[i]].push_back(s[i]);} dfs(n,0); } long long simulate(int x, int z) { long long st=z; for(int k=0;k<MAXK;k++) { while(true) { if(st>=stp[k+1] || x==n) break; for(int j=MAXL-1;j>=0;j--) if(mn[k][j][x]>st) {st+=sum[k][j][x]; x=pr[k][j][x];} st+=s[x]; x=w[x]; } } return st+add[x]; }

Compilation message (stderr)

dungeons.cpp: In function 'void dfs(int, long long int)':
dungeons.cpp:13:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 |     for(int i=0;i<g[s].size();i++) dfs(g[s][i],a+we[s][i]);
      |                 ~^~~~~~~~~~~~
#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...