제출 #309738

#제출 시각아이디문제언어결과실행 시간메모리
309738nicolaalexandra경찰관과 강도 (BOI14_coprobber)C++14
0 / 100
1 ms384 KiB
#include <bits/stdc++.h>
#include "coprobber.h"
//#define MAX_N 510
using namespace std;

int C,R;
struct stare{
    int c,r,t;
};
stare d[MAX_N*MAX_N*3];
int dp[MAX_N][MAX_N][2],fth[MAX_N][MAX_N];

int start (int n, bool a[MAX_N][MAX_N]){
    /// stari de pierdere / de castig
    /// C,R,0/1 - unde se afla politistu si hotu si cine a facut ultima miscare
    /// C,C,0/1 - stare de castig

    int p = 1, u = 0;
    for (int i=0;i<n;++i){
        dp[i][i][0] = dp[i][i][1] = 1;
        d[++u] = {i,i,0};
        d[++i] = {i,i,1};
    }

    while (p <= u){
        int c = d[p].c, r = d[p].r, t = d[p].t; /// stare castigatoare
        ++p;

        if (!t){ /// trb sa mute hotu
            for (int i=0;i<n;++i){
                if (i == r || !a[r][i] || dp[c][i][1])
                    continue;

                /// daca toti vecinii lui i au stare de castig atunci si asta e stare de castig
                int ok = 1;
                for (int j=0;j<n;++j)
                    if (a[i][j] && !dp[c][j][0]){
                        ok = 0;
                        break;
                    }

                if (ok){
                    dp[c][i][1] = 1;
                    d[++u] = {c,i,1};
                }}

        } else { /// politistul se muta sau sta pe loc
            for (int i=0;i<n;++i){
                if ((!a[c][i] && i != c) || dp[i][r][0])
                    continue;

                dp[i][r][0] = 1;
                fth[i][r] = c; /// unde ma duc din starea asta
                d[++u] = {i,r,0};
                }}}

    for (int i=0;i<n;i++){
        int ok = 1;
        for (int j=0;j<n;j++)
            if (!dp[i][j][0]){
                ok = 0;
                break;
            }
        if (ok)
            return i;
    }
    return -1;

}

int nextMove (int R){

    C = fth[C][R];
    return C;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...