Submission #1234796

#TimeUsernameProblemLanguageResultExecution timeMemory
1234796HanksburgerPermutation Game (APIO25_permgame)C++20
12 / 100
3 ms328 KiB
#include "permgame.h"
#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > perm;
vector<int> adj[405], vec;
int ans;
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];
        }
        perm.push_back(tmp);
        if (tmp.size()==1)
            ans++;
    }
}
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);
    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;
            }
        }
        //cout << "vec " << vec[0] << '\n';
        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]);
            }
            //cout << "vec " << vec[i] << '\n';
        }
        while (1)
        {
            int updated=0;
            for (int i=0; i<perm.size(); i++)
            {
                if (perm[i].size()<M)
                    continue;
                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;
            }
            if (!updated)
                break;
        }
        return ans;
    }
}

Compilation message (stderr)

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