Submission #155432

#TimeUsernameProblemLanguageResultExecution timeMemory
155432oolimryCop and Robber (BOI14_coprobber)C++14
0 / 100
28 ms23936 KiB
#include "coprobber.h" #include <bits/stdc++.h> using namespace std; static int states[500005]; //police * 1000 + robber * 2 + (IF POLICE TURN) static int degree[500005]; static vector<int> adj[500005]; static vector<int> rev[500005]; queue<int> can; inline int g(int police, int robber, int turn){ return police * 1000 + robber * 2 + turn; } int start(int N, bool A[MAX_N][MAX_N]) { int n = N; for(int u = 0;u < n;u++){ for(int v = 0;v < n;v++){ int s = g(u,v,0); adj[s].push_back(g(u,v,1)); //Wait for(int i = 0;i < n;i++){ if(A[u][i] == 1) adj[s].push_back(g(i,v,1)); } s = g(u,v,1); for(int i = 0;i < n;i++){ if(A[v][i] == 1) adj[s].push_back(g(u,i,0)); } } } for(int i = 0;i < 500005;i++){ int u = i / 1000; int v = (i / 2) % 500; for(int j = 0;j < adj[i].size();j++){ int q = adj[i][j]; rev[q].push_back(i); degree[i]++; if(u == v){ states[i] = 1; } //cout << i << " " << q << "\n"; } } for(int i = 0;i < 500005;i++){ if(states[i] == 1){ can.push(i); degree[i] = 0; } } while(!can.empty()){ int t = can.front(); //cout << t << "\n"; can.pop(); for(int i = 0;i < rev[t].size();i++){ int s = rev[t][i]; if(states[s] == 0){ degree[s]--; //cout << t << " " << s << " " << degree[s] << "\n"; if(s % 2 == 0){ can.push(s); states[s] = 1; degree[s] = 0; } else if(degree[s] == 0){ can.push(s); states[s] = 1; } } } } for(int u = 0;u < n;u++){ bool can = true; for(int v = 0;v < n;v++){ if(states[g(u,v,0)] == 0){ can = false; break; } } if(can) return u; } return -1; } int nextMove(int R) { return 0; }

Compilation message (stderr)

coprobber.cpp: In function 'int start(int, bool (*)[500])':
coprobber.cpp:32:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j = 0;j < adj[i].size();j++){
                 ~~^~~~~~~~~~~~~~~
coprobber.cpp:53:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0;i < rev[t].size();i++){
                 ~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...