Submission #603965

#TimeUsernameProblemLanguageResultExecution timeMemory
603965keta_tsimakuridzeDungeons Game (IOI21_dungeons)C++17
0 / 100
472 ms582968 KiB
#include "dungeons.h"
#include<bits/stdc++.h>
#define pii pair<long long, long long>
#define f first
#define s second
using namespace std;
#include <vector>
vector<int> s, p, w, l;
int n;
const long long inf = 1e18;
const int N =2e5;
long long nxt[N][33][2], add[N][33][2], d[N][2], mx[N][33];
vector<pii> V[N][2];
void bfs(int t) {
    for(int i = 0; i < n; i++) d[i][t] = inf;
    queue<int> q;
    q.push(n);
    while(q.size()) {
        int u = q.front();
        q.pop();
        for(int i = 0; i < V[u][t].size(); i++) {
            d[V[u][t][i].f][t] = d[u][t] + V[u][t][i].s;
            q.push(V[u][t][i].f);
        }
    }
}
void init(int N, std::vector<int> S, std::vector<int> P, std::vector<int> W, std::vector<int> L) {
    s = S; p = P; w = W; l = L;
    n = N;
    for(int i = 0; i < n; i++) nxt[i][0][0] = l[i], nxt[i][0][1] = w[i], add[i][0][0] = p[i], add[i][0][1] = s[i], mx[i][0] = s[i];
    nxt[n][0][0] = nxt[n][0][1] = n;
    mx[n][0] = -1e9;
    for(int i = 1; i <= 30; i++) {
        for(int j = 0; j <= n; j++) {
            for(int t = 0; t < 2; t++)
            nxt[j][i][t] = nxt[nxt[j][i - 1][t]][i - 1][t],
            add[j][i][t] = add[j][i -  1][t] + add[nxt[j][i - 1][t]][i - 1][t];
            int t = 1;
            mx[j][i] = max(mx[j][i - 1], -add[j][i - 1][t] + mx[nxt[j][i - 1][t]][i - 1]);
        }
    }
    for(int i = 0; i < n; i++) {
        V[l[i]][0].push_back({i, p[i]});
        V[w[i]][1].push_back({i, s[i]});
    }
    bfs(0);
    bfs(1);
}
long long simulate(int x, int Z) {
	long long  ans2 = Z;
	while(x != n) {
      //  cout << x << endl; system("pause");
        for(int i = 30; i >= 0; i--) {
            if(mx[x][i] <= ans2) {
                ans2 += add[x][i][1];
                x = nxt[x][i][1];
            } //else cout << "+" << 30 << endl;
        }
        if(x == n) break;
        assert(ans2 < s[x]);
        ans2 += s[x];
        x = l[x];
	}
    return ans2;
}

Compilation message (stderr)

dungeons.cpp: In function 'void bfs(int)':
dungeons.cpp:21:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   21 |         for(int i = 0; i < V[u][t].size(); 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...