Submission #1213945

#TimeUsernameProblemLanguageResultExecution timeMemory
1213945i_love_springCop and Robber (BOI14_coprobber)C++20
0 / 100
0 ms328 KiB
#include "coprobber.h"
#include <bits/stdc++.h>
using namespace std;
const int nx = 505;
#define ar array
int nxt[nx][nx], cnt[nx][nx], vis[nx][nx][2];
vector<int> adj[nx];
queue<ar<int, 3>> q;
int cur;

int start(int N, bool A[MAX_N][MAX_N])
{
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            if (A[i][j]) adj[i].push_back(j);

    for (int i = 0; i < N; i++) {
        q.push({i, i, 1});
        q.push({i, i, 0});
    }

    while (!q.empty()) {
        auto [p, r, t] = q.front();
        q.pop();
        if (vis[p][r][t] == 2) continue;
        vis[p][r][t] = 2;

        if (t == 0) { // Robber's turn
            for (int u : adj[r]) {
                cnt[p][u]++;
                if (cnt[p][u] == (int)adj[u].size() && vis[p][u][1] == 0) {
                    q.push({p, u, 1});
                    vis[p][u][1] = 1;
                }
            }
        } else { // Police's turn
            for (int u : adj[p]) {
                if (vis[u][r][0] == 0) {
                    q.push({u, r, 0});
                    vis[u][r][0] = 1;
                    nxt[p][r] = u;
                }
            }
            if (vis[p][r][0] == 0) {
                q.push({p, r, 0});
                vis[p][r][0] = 1;
                nxt[p][r] = p;
            }
        }
    }

    for (int i = 0; i < N; i++) {
        bool ok = true;
        for (int j = 0; j < N; j++)
            if (vis[i][j][1] == 0)
                ok = false;
        if (ok) {
            cur = i;
            return i;
        }
    }

    return -1;
}

int nextMove(int R) {
    return cur = nxt[cur][R];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...