#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 = 0;
int start(int N, bool A[MAX_N][MAX_N])
{
    for (int i = 0; i < N;i++) {
        for (int j = i + 1; j < N;j++) {
            if (A[i][j]) {
                adj[i].push_back(j);
                adj[j].push_back(i);
            }
        }
    }
    memset(cnt,0,sizeof(cnt));
    memset(vis,0,sizeof(vis));
    memset(nxt,-1,sizeof(nxt));
    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(); // police,robber, turn  
        q.pop();
        if (vis[p][r][t] == 2) continue; // already done
        vis[p][r][t] = 2;
        if (t == 0) { // robber's turn
            for (int u : adj[r]) {
                cnt[p][u]++; 
                if (cnt[p][u] == adj[u].size()) {
                    if (vis[p][u][1] == 0) {
                        q.push({p,u,1});
                        vis[p][u][1] = 1;
                    }
                }
            }
        }else {
            for (int u : adj[p]) {
                if (vis[u][r][0] == 0) {
                    q.push({u,r,0});
                    nxt[p][r] = u;
                    vis[u][r][0] = 1;
                }
            }
            // if police chooses stay 
            if (vis[p][r][0] == 0) {
                q.push({p,r,0});
                nxt[p][r] = p;
                vis[p][r][0] = 1;
            }
        }
    }
    for (int i = 0; i < N;i++) {
        bool ok = 1;
        for (int j = 0; j < N;j++) {
            if (vis[i][j][1] == 0) ok = 0;
        }
        if (ok) {
            cur = i;
            return i;
        }
    }
    return  -1;
}
int nextMove(int R)
{
    return cur = nxt[cur][R];
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |