제출 #1218289

#제출 시각아이디문제언어결과실행 시간메모리
1218289HappyCapybaraDungeons Game (IOI21_dungeons)C++17
11 / 100
857 ms883616 KiB
#include "dungeons.h" #include<bits/stdc++.h> using namespace std; #define ll long long int jl = 30; int n; vector<int> s, p, w, l; //vector<vector<vector<vector<ll>>>> g; ll g[50005][25][30][3]; void init(int n, vector<int> s, vector<int> p, vector<int> w, vector<int> l){ ::n = n; ::s = s; ::s.push_back(0); ::p = p; ::p.push_back(0); ::w = w; ::w.push_back(n); ::l = l; ::l.push_back(n); //g.resize(n+1, vector<vector<vector<ll>>>(25, vector<vector<ll>>(jl, vector<ll>(3)))); for (int k=0; k<25; k++){ //cout << k << endl; for (int i=0; i<=n; i++){ if (s[i] <= (1<<k)){ g[i][k][0][0] = ::w[i]; g[i][k][0][1] = ::s[i]; g[i][k][0][2] = (ll)pow(10, 9); } else { g[i][k][0][0] = ::l[i]; g[i][k][0][1] = ::p[i]; g[i][k][0][1] = ::s[i]; } } for (int j=1; j<jl; j++){ for (int i=0; i<n+1; i++){ g[i][k][j][0] = g[g[i][k][j-1][0]][k][j-1][0]; g[i][k][j][1] = g[i][k][j-1][1]+g[g[i][k][j-1][0]][k][j-1][1]; g[i][k][j][2] = min(g[i][k][j-1][2], g[g[i][k][j-1][0]][k][j-1][2]-g[i][k][j-1][1]); } } } return; } ll simulate(int x, int z2){ ll z = z2; while (x != n){ //cout << x << " " << z << endl; int k = floor(log2(z)); for (int j=jl-1; j>=0; j--){ if (z + g[x][k][j][1] < (1<<(k+1)) && z < g[x][k][j][2]){ z += g[x][k][j][1]; x = g[x][k][j][0]; } } if (z >= s[x]){ z += s[x]; x = w[x]; } else { z += p[x]; x = l[x]; } } 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...