Submission #1053405

#TimeUsernameProblemLanguageResultExecution timeMemory
1053405Zbyszek99Cop and Robber (BOI14_coprobber)C++17
100 / 100
290 ms8144 KiB
#include <bits/stdc++.h> #include "coprobber.h" #define rep(i,a,b) for(int i = a; i <= b; i++) #define pii pair<int,int> #define pb push_back using namespace std; struct dp { int f,s,move; }; // DP[police][robber][turn] bool DP[MAX_N][MAX_N][2]; int zlicz[MAX_N][MAX_N]; int where_go[MAX_N][MAX_N]; vector<int> graf[MAX_N]; int n; int cur_poz; int start(int N, bool A[MAX_N][MAX_N]) { n = N; queue<dp> winning_pos; rep(i,0,n-1) { rep(j,0,n-1) { if(A[i][j] == 1) { graf[i].push_back(j); } } } rep(i,0,n-1) { winning_pos.push({i,i,1}); DP[i][i][1] = true; } rep(pocz,0,n-1) { rep(kon,0,n-1) { zlicz[pocz][kon] = (int)graf[kon].size(); } } while(!winning_pos.empty()) { dp t = winning_pos.front(); winning_pos.pop(); int p = t.f; int k = t.s; if(t.move == 0) { rep(new_v,0,n-1) { if(A[new_v][k]) { zlicz[p][new_v]--; if (zlicz[p][new_v] == 0 && !DP[p][new_v][1]) { DP[p][new_v][1] = true; winning_pos.push({p,new_v,1}); } } } } else { if(!DP[p][k][0]) { where_go[p][k] = p; DP[p][k][0] = true; winning_pos.push({p,k,0}); } rep(new_v,0,n-1) { if(A[new_v][p] && !DP[new_v][k][0]) { where_go[new_v][k] = p; DP[new_v][k][0] = true; winning_pos.push({new_v,k,0}); } } } } rep(start,0,n-1) { bool is = true; rep(end,0,n-1) { if(DP[start][end][0] == false) { // cout << start << " " << end << " se\n"; is = false; break; } } if(is) { cur_poz = start; return start; } } return -1; } int nextMove(int R) { cur_poz = where_go[cur_poz][R]; return cur_poz; } // int main() // { // int n; // cin >> n; // bool A[500][500]; // rep(i,0,n-1) // { // rep(j,0,n-1) // { // cin >> A[i][j]; // } // } // int poz = start(n,A); // cout << "police: " << poz << "\n"; // if(poz == -1) // { // return 0; // } // cout << "Rob poz: "; // int rob; // cin >> rob; // while(poz != rob) // { // poz = nextMove(rob); // cout << "new poz: " << poz << "\n"; // cout << "Rob: "; // cin >> rob; // } // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...