제출 #155435

#제출 시각아이디문제언어결과실행 시간메모리
155435oolimry경찰관과 강도 (BOI14_coprobber)C++14
60 / 100
1556 ms135000 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 int to[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 pos; 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); rev[g(u,v,1)].push_back(s); //Wait degree[s]++; for(int i = 0;i < n;i++){ if(A[u][i] == 1){ rev[g(i,v,1)].push_back(s); degree[s]++; } } s = g(u,v,1); for(int i = 0;i < n;i++){ if(A[v][i] == 1){ rev[g(u,i,0)].push_back(s); degree[s]++; } } if(u == v){ states[g(u,v,1)] = 1; states[g(u,v,0)] = 0; } } } for(int i = 0;i < 500005;i++){ if(states[i] == 1){ can.push(i); degree[i] = 0; } } int work[n]; fill(work,work+n,n); while(!can.empty()){ int t = can.front(); //cout << t << "\n"; if(t % 2 == 0){ work[t/1000]--; if(work[t/1000] == 0){ pos = t/1000; return t/1000; } } 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; to[s] = t; //cout << s << " " << t << "\n"; } 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){ pos = u; return u; } } */ return -1; } int nextMove(int R) { int cur = g(pos,R,0); int t = to[cur]; t /= 1000; //cout << t << " " << R << "\n"; pos = t; return t; }

컴파일 시 표준 에러 (stderr) 메시지

coprobber.cpp: In function 'int start(int, bool (*)[500])':
coprobber.cpp:61: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...