//#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |