Submission #250552

#TimeUsernameProblemLanguageResultExecution timeMemory
250552opukittpceno_hhrCop and Robber (BOI14_coprobber)C++17
60 / 100
832 ms262148 KiB
#include <iostream> #include <vector> #include <map> #include <set> #include <queue> #include <algorithm> #include <string> #include <cmath> #include <cstdio> #include <iomanip> #include <fstream> #include <cassert> #include <cstring> #include <unordered_set> #include <unordered_map> #include <numeric> #include <ctime> #include <bitset> #include <complex> #include <chrono> #include <random> #include <functional> #define MAX_N 500 // modify the following functions // you can define global variables and functions using namespace std; const int M = 500 * 500 * 2; int loose[M]; int win[M]; int cnt[M]; int turn[M]; int used[M]; vector<int> ig[M]; void dfs(int v) { used[v] = 1; for (auto i : ig[v]) { if (used[i]) continue; if (loose[v]) { win[i] = 1; turn[i] = v; dfs(i); } else { cnt[i]--; if (cnt[i] == 0) { loose[i] = 1; dfs(i); } } } } int Nn, Cn; int start(int N, bool a[MAX_N][MAX_N]) { int n = N; Nn = N; Cn = -1; for (int k = 0; k < 2 * n * n; k++) { int t = k / (n * n); int st = k % (n * n); int i = st / n; int j = st % n; if (t == 0) { //our move for (int to = 0; to < n; to++) { if (a[i][to] || i == to) { ig[n * n + (to * n + j)].push_back(k); cnt[k]++; } } } else { //robber move for (int to = 0; to < n; to++) { if (a[j][to]) { ig[i * n + to].push_back(k); cnt[k]++; } } } } for (int i = 0; i < n; i++) { loose[n * n + i * n + i] = 1; } for (int i = 0; i < n; i++) { win[i * n + i] = 1; } for (int i = 0; i < 2 * n * n; i++) { if (!used[i] && (win[i] || loose[i])) { dfs(i); } } for (int i = 0; i < n; i++) { int ok = 1; for (int j = 0; j < n; j++) { ok &= win[i * n + j]; } if (ok) { Cn = i; return i; } } return -1; } int nextMove(int r) { if (!win[Cn * Nn + r]) { return -1; } int next_state = turn[Cn * Nn + r]; next_state %= (Nn * Nn); Cn = next_state / Nn; return Cn; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...