Submission #1165137

#TimeUsernameProblemLanguageResultExecution timeMemory
1165137spycoderytCop and Robber (BOI14_coprobber)C++20
100 / 100
478 ms11536 KiB
#include "coprobber.h"
#include <bits/stdc++.h>
using namespace std;
int as[MAX_N][MAX_N],w[MAX_N][MAX_N][2],f[MAX_N][MAX_N];
int qh,qt;
array<int,3> qu[MAX_N*MAX_N*2];
int p=0;
int start(int n, bool a[MAX_N][MAX_N])
{
    for(int i = 0;i<n;i++){
        for(int j = 0;j<n;j++) {
            for(int k = 0;k<n;k++) as[k][i] += a[i][j];
        }
    }
    qh=qt=0;
    for(int i = 0;i<n;i++) {
        for(int j = 0;j<2;j++) {
            w[i][i][j]=1;
            qu[qt++]={i,i,j};
        }
    }
    while(qh<qt){
        array<int,3> u = qu[qh++];
        for(int i = 0;i<n;i++) {
            if(u[2]&&(a[i][u[0]]||i==u[0])&&!w[i][u[1]][0]){
                w[i][u[1]][0]=1;
                qu[qt++]={i,u[1],0};
                f[i][u[1]]=u[0];
            } else if(!u[2]&&a[i][u[1]]&&!w[u[0]][i][1]&&--as[u[0]][i]<=0){
                w[u[0]][i][1]=1;
                qu[qt++]={u[0],i,1};
            }
        }
    }
    int ok = 1;
    for(int i = 0;i<n&&ok;i++){
        ok=w[0][i][0];
    }
    return ok?0:-1;
}

int nextMove(int R)
{
    return p=f[p][R];
}

/*
/usr/bin/g++ -DEVAL -std=gnu++11 -O2 -pipe -s -o askask grader.cpp askask2.cpp

/usr/bin/g++ -DEVAL -std=gnu++11 -O2 -pipe -s -o coprobber grader.cpp coprobber.cpp
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...