Submission #1256295

#TimeUsernameProblemLanguageResultExecution timeMemory
1256295PenguinsAreCutePermutation Game (APIO25_permgame)C++20
46 / 100
10 ms328 KiB
//#include "permgame.h" #include <bits/stdc++.h> using namespace std; int Bob(vector<int>); int Alice(int m, int e, std::vector<int> u, std::vector<int> v, int n, std::vector<int> p) { int deg[m]; memset(deg,0,sizeof(deg)); for(int i=0;i<e;i++) deg[u[i]]++, deg[v[i]]++; if(*max_element(deg,deg+m) >= 3) { int ans = 0; for(int i=0;i<n;i++) ans += (p[i] == i); return ans; } int ord[m]; ord[0] = min_element(deg, deg + m) - deg; for(int i=0;i<e;i++) if(u[i] == ord[0] || v[i] == ord[0]) ord[1] = ord[0] ^ u[i] ^ v[i]; for(int i=2;i<m;i++) { ord[i] = ord[i-2]; for(int j=0;j<e;j++) if(u[j] == ord[i-1] || v[j] == ord[i-1]) ord[i] ^= u[j] ^ v[j]; } while(e == m - 1) { vector<int> vec; bool taken[n]; memset(taken,0,sizeof(taken)); for(int i=0;i<n;i++) if(p[i] != i && !taken[i]) { vec.push_back(i); for(int j=i;p[j]!=i;j=p[j]) vec.push_back(p[j]), taken[p[j]] = 1; } if(vec.size() < m) return n - vec.size(); vector<int> qry(m); for(int i=0;i<m;i++) qry[ord[i]] = vec[i]; int t = Bob(qry); swap(p[qry[u[t]]],p[qry[v[t]]]); } while(m == 3) { bool taken[n]; memset(taken,0,sizeof(taken)); bool gg = 1; for(int i=0;i<n;i++) if(!taken[i]) { int c = 1; for(int j=i;p[j]!=i;j=p[j]) c++, taken[p[j]] = 1; if(c > 2 && (c & 1)) { vector<int> qry = {i, p[i], p[p[i]]}; int t = Bob(qry); swap(p[qry[u[t]]],p[qry[v[t]]]); gg = 0; break; } } if(gg) { int ans = 0; for(int i=0;i<n;i++) ans += (i == p[i]); return ans; } } return 42; }
#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...