Submission #1232885

#TimeUsernameProblemLanguageResultExecution timeMemory
1232885a4n_던전 (IOI21_dungeons)C++20
37 / 100
349 ms258024 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair<int,int> pii; typedef pair<ll,ll> pll; #define F first #define S second #define endl '\n' #define Mp make_pair #define pb push_back #define pf push_front #define size(x) (ll)x.size() #define all(x) x.begin(), x.end() #define fuck(x) cout<<"("<<#x<<" : "<<x<<")\n" const int N = 4e5 + 100, lg = 25; const ll Mod = 1e9 + 7; const ll inf = 1e18 + 10; ll MOD(ll a, ll mod=Mod) { a%=mod; (a<0)&&(a+=mod); return a; } ll poww(ll a, ll b, ll mod=Mod) { ll res = 1; while(b > 0) { if(b%2 == 1) res = MOD(res * a, mod); b /= 2; a = MOD(a * a, mod); } return res; } int t, n, s[N], p[N], w[N], l[N]; ll dp[N]; struct node { ll dest, sump, mx; node() { dest = sump = mx = 0; } } par[lg][N]; pii move(int x, int z) { if(z >= s[x]) return {w[x], z + s[x]}; return {l[x], z + p[x]}; } void init(int _n, vector<int> _s, vector<int> _p, vector<int> _w, vector<int> _l) { n = _n; for(int i=1; i<=n; i++) { s[i] = _s[i-1], p[i] = _p[i-1], w[i] = _w[i-1] + 1, l[i] = _l[i-1] + 1; } w[n + 1] = n + 1; l[n + 1] = n + 1; for(int i=n; i>=1; i--) { dp[i] = dp[w[i]] + s[i]; } for(int i=n+1; i>=1; i--) { par[0][i].dest = w[i]; par[0][i].mx = s[i]; par[0][i].sump = s[i]; for(int j=1; j<lg; j++) { par[j][i].dest = par[j-1][par[j-1][i].dest].dest; par[j][i].sump = par[j-1][i].sump + par[j-1][par[j-1][i].dest].sump; par[j][i].mx = max(par[j-1][i].mx, par[j-1][par[j-1][i].dest].mx); } } } long long simulate(int x, int z) { x ++; while(x <= n && z <= 256) { pii tmp = move(x, z); x = tmp.F, z = tmp.S; } while(x <= n) { if(z >= 1e7) return (ll)dp[x] + z; for(int i=lg-1; i>=0; i--) { if(z >= par[i][x].mx) { z += par[i][x].sump; x = par[i][x].dest; } } pii tmp = move(x, z); x = tmp.F, z = tmp.S; if(z >= 1e7) return (ll)dp[x] + z; // if(__lg(z) == ) } 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...