Submission #837914

#TimeUsernameProblemLanguageResultExecution timeMemory
837914Mohmad_Zaid던전 (IOI21_dungeons)C++17
0 / 100
33 ms4052 KiB
#include "dungeons.h"
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
using namespace std;
int N;
vector<int>strength,power,win,lose;
vector<int>pre_process;
vector<bool>vis;
int dfs(int node){
    if(vis[node])return pre_process[node];
    if(node!=N){
        vis[node]=1;
        pre_process[node]=1+dfs(win[node]);
    }
    return pre_process[node];
}
void init(int n, vector<int> s, vector<int> p, vector<int> w, vector<int> l) {
    N=n;
    pre_process.resize(n+1,0);
    vis.assign(n+1,0);
    strength=s;
    power=p;
    win=w;
    lose=l;
    for(int i=0;i<n;i++){
        if(vis[i])continue;
        dfs(i);
    }
    return;
}

ll simulate(int x, int z) {
    // int n=4;
    // vector<int>s={6,6,6,6},p={1,2,1,3},w={2,4,3,4},l={1,3,1,0};
    // init(n,s,p,w,l);
    // // for(int i=0;i<n;i++){
    // //     cout<<pre_process[i]<<' ';
    // // }
    ll ans=z;
    while(ans<strength[0]){
        ans+=power[x];
        x=lose[x];
        if(x==N)return ans;
    }
    ans+=pre_process[x]*strength[0];
    return ans;
}
// int main(){
//     int n=3,q=2;
//     cout<<simulate(1,1);
//     // simulate(2,3);
//     return 0;
// }
#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...