Submission #1335403

#TimeUsernameProblemLanguageResultExecution timeMemory
1335403boclobanchatChameleon's Love (JOI20_chameleon)C++20
100 / 100
274 ms636 KiB
#include"chameleon.h"
#include<bits/stdc++.h>
using namespace std;
//------------------------------------
namespace {

int variable_example = 1;

}  // namespace
//------------------------------------
int dsu[1024];
vector<int> vi[1024];
bool ck[1024];
vector< pair<int,int> > ans;
int root(int i)
{
	if(!dsu[i]) return i;
	return dsu[i]=root(dsu[i]);
}
void merge(int i,int j)
{
	int a=i,b=j;
	if((i=root(i))==(j=root(j))) return ;
	if(vi[i].size()<vi[j].size()) swap(i,j);
	if(ck[a]==ck[b]) for(auto v:vi[j]) ck[v]=1-ck[v];
	for(auto v:vi[j]) vi[i].push_back(v);
	dsu[j]=i,vi[j].clear();
}
vector<int> compress(int idx,set<int> st)
{
	vector<int> res={idx};
	for(auto v:st) res.push_back(v);
	return res;
}
void update(int idx,set<int> st)
{
	while(Query(compress(idx,st))!=st.size()+1)
	{
		int l=1,r=st.size(),pos=0;
		while(l<=r)
		{
			int mid=(l+r)/2;
			set<int> sus;
			auto res=st.begin();
			for(int j=1;j<=mid;j++) sus.insert(*res),res=next(res);
			if(Query(compress(idx,sus))!=sus.size()+1) r=mid-1,pos=mid;
			else l=mid+1;
		}
		auto res=st.begin();
		for(int i=1;i<pos;i++) res=next(res);
		merge(idx,*res);
		ans.push_back({idx,*res});
		st.erase(res);
	}
}
void Solve(int n)
{
	for(int i=1;i<=n*2;i++) vi[i].push_back(i);
	for(int i=1;i<=n*2;i++)
	{
		set<int> vx,vy;
		for(int j=1;j<i;j++) if(ck[j]) vx.insert(j);
		else vy.insert(j);
		update(i,vx);
		update(i,vy);
	}
	for(auto v:ans)
	{
		vector<int> nans;
		for(int i=1;i<=n*2;i++) if(i!=v.first&&i!=v.second) nans.push_back(i);
		if(Query({v.first,v.second})==1&&Query(nans)!=n) Answer(v.first,v.second);
	}
}
#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...