Submission #1283043

#TimeUsernameProblemLanguageResultExecution timeMemory
1283043MMihalevSphinx's Riddle (IOI24_sphinx)C++20
Compilation error
0 ms0 KiB
#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
#include "sphinx.h"
using namespace std;
const int MAX_N=252;
int n;
vector<int>g[MAX_N];
vector<int>exp,ans;
int query[2][MAX_N][MAX_N];
bool used[MAX_N];
int depth[MAX_N];
void dfs(int u)
{
    used[u]=1;
    for(int v:g[u])
    {
        if(used[v])continue;
        depth[v]=depth[u]+1;
        dfs(v);
    }
}

bool check(int l,int r,bool wh,vector<int>ids,int col)
{
    bool full=1;
    for(int id:ids)
    {
        if(ans[id]==-1)full=0;
    }
    if(full)return 0;

    if(ids.size()==1)
    {
        for(int i=0;i<n;i++)
        {
            exp[i]=col;
        }
        exp[ids[0]]=-1;

        if(perform_experiment(exp)==1)return 1;
        return 0;
    }

    for(int i=0;i<n;i++)exp[i]=col;
    for(int id:ids)
    {
        exp[id]=-1;
    }

    int cnt=perform_experiment(exp);

    if(query[wh][l][r]==-1)
    {
        for(int i=0;i<n;i++)exp[i]=n;
        for(int id:ids)
        {
            exp[id]=-1;
        }
        query[wh][l][r]=perform_experiment(exp);
    }

    if(cnt<query[wh][l][r])
}

std::vector<int> find_colours(int N, std::vector<int> X, std::vector<int> Y)
{
    n=N;
    exp.resize(n);ans.resize(n);
    for(int i=0;i<n;i++)ans[i]=-1;
    memset(query,-1,sizeof(query));

    for(int i=0;i<X.size();i++)
    {
        g[X[i]].push_back(Y[i]);
        g[Y[i]].push_back(X[i]);
    }

    dfs(0);

    vector<int>idsodd,idseven;

    for(int i=0;i<n;i++)
    {
        if(depth[i]%2==0)
        {
            idseven.push_back(i);
        }
        else idsodd.push_back(i);
    }
    while(1);
    ///
    for(int col=0;col<n;col++)
    {
        while(1)
        {
            bool full=1;
            for(int id:idseven)
            {
                if(ans[id]==-1)full=0;
            }
            if(full)break;

            if(check(0,idseven.size()-1,0,idseven,col))rec(0,idseven,col);
        }

        while(1)
        {
            bool full=1;
            for(int id:idsodd)
            {
                if(ans[id]==-1)full=0;
            }
            if(full)break;

            if(check(0,idsodd.size()-1,1,idsodd,col))rec(1,idsodd,col);
        }
    }

    return ans;
}

Compilation message (stderr)

sphinx.cpp:10:12: warning: built-in function 'exp' declared as non-function [-Wbuiltin-declaration-mismatch]
   10 | vector<int>exp,ans;
      |            ^~~
sphinx.cpp: In function 'bool check(int, int, bool, std::vector<int>, int)':
sphinx.cpp:65:1: error: expected primary-expression before '}' token
   65 | }
      | ^
sphinx.cpp: In function 'std::vector<int> find_colours(int, std::vector<int>, std::vector<int>)':
sphinx.cpp:105:56: error: 'rec' was not declared in this scope
  105 |             if(check(0,idseven.size()-1,0,idseven,col))rec(0,idseven,col);
      |                                                        ^~~
sphinx.cpp:117:54: error: 'rec' was not declared in this scope
  117 |             if(check(0,idsodd.size()-1,1,idsodd,col))rec(1,idsodd,col);
      |                                                      ^~~
sphinx.cpp: In function 'bool check(int, int, bool, std::vector<int>, int)':
sphinx.cpp:64:26: warning: control reaches end of non-void function [-Wreturn-type]
   64 |     if(cnt<query[wh][l][r])
      |            ~~~~~~~~~~~~~~^