#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
#include "sphinx.h"
using namespace std;
vector<int>ans,exp1;
int n;
bool check(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++)exp1[i]=col;
exp1[ids[0]]=-1;
if(perform_experiment(exp1)==1)
{
return 1;
}
return 0;
}
int cc=0;
for(int i=0;i<n;i++)exp1[i]=col;
for(int id:ids)
{
exp1[id]=-1;
}
for(int id:ids)
{
if(ans[id]!=-1)
{
if(id>0)cc--;
if(id<n-1)cc--;
}
}
int cnt=perform_experiment(exp1);
if(cnt<cc+(ids[0]>0)+(ids.back()<n-1)+ids.back()-ids[0]+1)return 1;
return 0;
}
void rec(vector<int>ids,int col)
{
if(ids.size()==1)
{
ans[ids[0]]=col;
return;
}
int mid=(ids.size()-1)/2;
vector<int>ids1,ids2;
for(int i=0;i<ids.size();i++)
{
if(i<=mid)ids1.push_back(ids[i]);
else ids2.push_back(ids[i]);
}
if(check(ids1,col))rec(ids1,col);
else rec(ids2,col);
}
vector<int> find_colours(int N, std::vector<int> X, std::vector<int> Y)
{
n=N;
exp1.resize(n);
ans.resize(n);
for(int i=0;i<n;i++)
{
ans[i]=-1;
}
vector<int>idseven,idsodd;
for(int i=0;i<n;i++)
{
if(i%2==0)idseven.push_back(i);
else idsodd.push_back(i);
}
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(idseven,col))rec(idseven,col);
else break;
}
while(1)
{
bool full=1;
for(int id:idsodd)
{
if(ans[id]==-1)full=0;
}
if(full)break;
if(check(idsodd,col))rec(idsodd,col);
else break;
}
}
return ans;
}
| # | 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... |