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...