Submission #1049199

# Submission time Handle Problem Language Result Execution time Memory
1049199 2024-08-08T14:50:13 Z Alihan_8 Dungeons Game (IOI21_dungeons) C++17
0 / 100
2496 ms 2097152 KB
#include "dungeons.h"
#include <vector>

#include <bits/stdc++.h>

using namespace std;

#define all(x) x.begin(), x.end()
#define ar array
#define pb push_back
#define ln '\n'
//#define int long long

using i64 = long long;

template <class F, class _S>
bool chmin(F &u, const _S &v){
    bool flag = false;
    if ( u > v ){
        u = v; flag |= true;
    }
    return flag;
}

template <class F, class _S>
bool chmax(F &u, const _S &v){
    bool flag = false;
    if ( u < v ){
        u = v; flag |= true;
    }
    return flag;
}

const i64 inf = 1e15;

const int L = 30;

vector <int> s, p, w, l;

int n;

struct Jump{
	vector <vector<i64>> U, S;
	
	int n;
	
	Jump() {}
	
	void modify(vector <int> p, vector <int> w){
		n = p.size();
		
		S.resize(n + 1); 
		U.resize(n + 1);
		
		for ( int i = 0; i <= n; i++ ){
			S[i].resize(L);
			U[i].resize(L);
			
			if ( i == n ) continue;
			
			S[i][0] = w[i];
			U[i][0] = p[i];
		}
		
		U[n][0] = n;
		S[n][0] = inf;
		
		for ( int i = 1; i < L; i++ ){
			for ( int j = 0; j <= n; j++ ){
				U[j][i] = U[U[j][i - 1]][i - 1];
				S[j][i] = min(inf, S[j][i - 1] + S[U[j][i - 1]][i - 1]);
			}
		}
	}
	
	i64 simulate(int &u, i64 z, i64 rq){
		i64 cnt = z;
		
		for ( int i = 19; i >= 0; i-- ){
			if ( cnt + S[u][i] < rq ){
				cnt += S[u][i];
				u = U[u][i];
			}
		}
		
		if ( cnt < rq && u != n ){
			cnt += S[u][0];
			u = U[u][0];
		}
		
		return cnt;
	};
};

vector <Jump> A;

vector <i64> v;

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_;
	
	v.pb(inf);
	
	for ( auto &u: s ) v.pb(u);
	
	sort(all(v));
	
	v.resize(unique(all(v)) - v.begin());
	
	for ( auto &x: v ){
		vector <int> fa(n), wh(n);
		
		for ( int i = 0; i < n; i++ ){
			if ( s[i] < x ){
				fa[i] = w[i];
				wh[i] = s[i];
			} else{
				fa[i] = l[i];
				wh[i] = p[i];
			}
		}
		
		Jump h; h.modify(fa, wh);
		
		A.pb(h);
	}
}

long long simulate(int x, int Z) {
	// subtask #4
	
	i64 z = Z;
	
	for ( int i = 0; i < (int)v.size(); i++ ){
		z = A[i].simulate(x, z, v[i]);
	}
	
	assert(x == n);
	
	return z;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 10 ms 13532 KB Output is correct
4 Runtime error 2405 ms 2097152 KB Execution killed with signal 9
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 543 ms 550088 KB Output is correct
2 Runtime error 2496 ms 2097152 KB Execution killed with signal 9
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2140 KB Output is correct
2 Correct 113 ms 86832 KB Output is correct
3 Correct 126 ms 86980 KB Output is correct
4 Correct 115 ms 87584 KB Output is correct
5 Correct 110 ms 87456 KB Output is correct
6 Correct 106 ms 87720 KB Output is correct
7 Incorrect 135 ms 87716 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2140 KB Output is correct
2 Correct 113 ms 86832 KB Output is correct
3 Correct 126 ms 86980 KB Output is correct
4 Correct 115 ms 87584 KB Output is correct
5 Correct 110 ms 87456 KB Output is correct
6 Correct 106 ms 87720 KB Output is correct
7 Incorrect 135 ms 87716 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2140 KB Output is correct
2 Correct 113 ms 86832 KB Output is correct
3 Correct 126 ms 86980 KB Output is correct
4 Correct 115 ms 87584 KB Output is correct
5 Correct 110 ms 87456 KB Output is correct
6 Correct 106 ms 87720 KB Output is correct
7 Incorrect 135 ms 87716 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 543 ms 550088 KB Output is correct
2 Runtime error 2496 ms 2097152 KB Execution killed with signal 9
3 Halted 0 ms 0 KB -