Submission #1220605

#TimeUsernameProblemLanguageResultExecution timeMemory
1220605rainboyPermutation Game (APIO25_permgame)C++20
22 / 100
10 ms332 KiB
#include "permgame.h" #include <cstring> #include <vector> using namespace std; typedef vector<int> vi; const int N = 400; int ev[N][2], eo[N], ww[N], cnt; char visited[N]; int Alice(int m, int e, vi uu, vi vv, int n, vi pp) { memset(eo, 0, m * sizeof *eo); int bad = 0; for (int h = 0; h < e; h++) { int u = uu[h], v = vv[h]; if (eo[u] == 2 || eo[v] == 2) { bad = 1; break; } ev[u][eo[u]++] = v, ev[v][eo[v]++] = u; } int k = 0; for (int i = 0; i < n; i++) if (pp[i] == i) k++; if (bad || e == m - 1 && k > n - m) return k; if (e == m - 1) { int u = 0; while (eo[u] == 2) u++; ww[cnt++] = u; int v = ev[u][0]; while (1) { ww[cnt++] = v; if (eo[v] == 1) break; int w = u ^ ev[v][0] ^ ev[v][1]; u = v, v = w; } vi ii(m); while (1) { memset(visited, 0, n * sizeof *visited); int k = 0; for (int i = 0; i < n && k < m; i++) if (pp[i] != i && !visited[i]) while (!visited[i] && k < m) ii[ww[k++]] = i, visited[i] = 1, i = pp[i]; if (k < m) break; int h = Bob(ii); int i = ii[uu[h]], j = ii[vv[h]], tmp; tmp = pp[i], pp[i] = pp[j], pp[j] = tmp; } return m == 2 ? n : n - m + 1; } return -1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...