Submission #1234946

#TimeUsernameProblemLanguageResultExecution timeMemory
1234946HanksburgerPermutation Game (APIO25_permgame)C++20
22 / 100
10 ms328 KiB
#include "permgame.h" #include <bits/stdc++.h> using namespace std; vector<vector<int> > perm; vector<int> adj[405], vec; int ans, initans; void computePerm(vector<int> P) { int visited[405]={}; ans=0; perm.clear(); for (int i=0; i<P.size(); i++) { if (visited[i]) continue; vector<int> tmp; int cur=i; while (!visited[cur]) { tmp.push_back(cur); visited[cur]=1; cur=P[cur]; } if (tmp.size()==1) ans++; else perm.push_back(tmp); } } int Alice(int M, int E, vector<int> U, vector<int> V, int N, vector<int> P) { for (int i=0; i<E; i++) { adj[U[i]].push_back(V[i]); adj[V[i]].push_back(U[i]); } computePerm(P); initans=ans; for (int i=0; i<M; i++) if (adj[i].size()>=3) return ans; if (E<M) { for (int i=0; i<M; i++) { if (adj[i].size()==1) { vec.push_back(i); break; } } for (int i=1; i<M; i++) { if (i==1) vec.push_back(adj[vec[i-1]][0]); else { int pre=vec[i-2]; if (adj[vec[i-1]][0]==pre) vec.push_back(adj[vec[i-1]][1]); else vec.push_back(adj[vec[i-1]][0]); } } while (1) { int updated=0, sum=0; for (int i=0; i<perm.size(); i++) { if (perm[i].size()>=M) { updated=1; vector<int> tmp(M); for (int j=0; j<M; j++) tmp[vec[j]]=perm[i][j]; int edge=Bob(tmp); swap(P[tmp[U[edge]]], P[tmp[V[edge]]]); computePerm(P); break; } sum+=perm[i].size(); if (sum>=M) { updated=1; vector<int> tmp(M); int cnt=0; for (int j=0; j<=i; j++) { for (int x:perm[j]) { tmp[vec[cnt]]=x; cnt++; if (cnt==M) break; } if (cnt==M) break; } int edge=Bob(tmp); swap(P[tmp[U[edge]]], P[tmp[V[edge]]]); computePerm(P); break; } } if (!updated) break; } if (M==2) return N; else return max(initans, N-M+1); } }

Compilation message (stderr)

permgame.cpp: In function 'int Alice(int, int, std::vector<int>, std::vector<int>, int, std::vector<int>)':
permgame.cpp:113:1: warning: control reaches end of non-void function [-Wreturn-type]
  113 | }
      | ^
#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...