Submission #1234976

#TimeUsernameProblemLanguageResultExecution timeMemory
1234976HanksburgerPermutation Game (APIO25_permgame)C++20
16 / 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; bool cmp(vector<int> &vec1, vector<int> &vec2) { if (vec1.size()==4) return 1; if (vec2.size()==4) return 0; return vec1.size()>vec2.size(); // beware of inequality direction } 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); } sort(perm.begin(), perm.end(), cmp); // DONT FORGET THIS NEW ADDITION } 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]); } vec.push_back(0); 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]); } } computePerm(P); initans=ans; for (int i=0; i<M; i++) if (adj[i].size()>=3) return ans; while (1) { int updated=0, sum=0; for (int i=0; i<perm.size(); i++) { 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; } return max(initans, N-M+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...