QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#553782#9241. SphinxJohnAlfnovCompile Error//C++174.4kb2024-09-08 20:15:522024-09-08 20:15:52

Judging History

你现在查看的是最新测评结果

  • [2024-09-08 20:15:52]
  • 评测
  • [2024-09-08 20:15:52]
  • 提交

answer

#include<bits/stdc++.h>
#define ONLINE_JUDGE
using namespace std;
#ifdef ONLINE_JUDGE
#include "sphinx.h"
#endif
#ifndef ONLINE_JUDGE
int a[1005],b[1005],cnt=0;
int perform_experiment(vector<int>E){
	printf("%d\n",++cnt);
	int sz=E.size();
	for(int i=0;i<sz;++i){
		b[i]=(E[i]==-1?a[i]:E[i]);
	}
	int ans=1;
	for(int i=0;i<sz-1;++i)ans+=(b[i]!=b[i+1]);
	return ans;
}
#endif
int n,m;
vector<int>C,G;
int fa[255],u[100005],v[100005];
int findfather(int x){
	return x==fa[x]?x:fa[x]=findfather(fa[x]);
}
int aa[255];
int findaa(int x){
	return x==aa[x]?x:aa[x]=findaa(aa[x]);
}
vector<int>gg[255];
int ss[255],vist[255],tt,I;
int query(int l,int r){
	for(int i=0;i<n;++i)vist[i]=0,aa[i]=i,C[i]=n;
	for(int i=l;i<=r;++i)for(auto cu:gg[ss[i]])vist[cu]=1,C[cu]=-1;
	vist[I]=1,C[I]=-1;
	for(int i=0;i<m;++i)if(!vist[u[i]]&&!vist[v[i]]){
		int fu=findaa(u[i]),fv=findaa(v[i]);
		if(fu!=fv)aa[fu]=fv;
	}
	int cnt=0;
	for(int i=0;i<n;++i)if(!vist[i]&&aa[i]==i)++cnt;
	return r-l+1+1+cnt-perform_experiment(C);
}
void solve(int l,int r,int k){
	if(!k)return;
	if(l==r){
		fa[ss[l]]=I;
		return;
	}
	int mid=(l+r)>>1;
	int k1=query(l,mid);
	solve(l,mid,k1);
	solve(mid+1,r,k-k1);
}
int s1[255],s2[255];
vector<int>g[255];
int dep[255];
void dfs(int x){
	vist[x]=1;
	for(auto cu:g[x])if(!vist[cu]){
		dep[cu]=dep[x]+1;
		dfs(cu);
	}
}
int query1(int l,int r,int d){
	for(int i=0;i<n;++i)vist[i]=0,aa[i]=i,C[i]=d;
	for(int i=l;i<=r;++i)for(auto cu:gg[s1[i]])vist[cu]=1,C[cu]=-1;
	for(int i=0;i<m;++i)if(!vist[u[i]]&&!vist[v[i]]){
		int fu=findaa(u[i]),fv=findaa(v[i]);
		if(fu!=fv)aa[fu]=fv;
	}
	int cnt=0;
	for(int i=0;i<n;++i)if(!vist[i]&&aa[i]==i)++cnt;
	return r-l+1+cnt-perform_experiment(C);
}
int query2(int l,int r,int d){
	for(int i=0;i<n;++i)vist[i]=0,aa[i]=i,C[i]=d;
	for(int i=l;i<=r;++i)for(auto cu:gg[s2[i]])vist[cu]=1,C[cu]=-1;
	for(int i=0;i<m;++i)if(!vist[u[i]]&&!vist[v[i]]){
		int fu=findaa(u[i]),fv=findaa(v[i]);
		if(fu!=fv)aa[fu]=fv;
	}
	int cnt=0;
	for(int i=0;i<n;++i)if(!vist[i]&&aa[i]==i)++cnt;
	return r-l+1+cnt-perform_experiment(C);
}
int p[255],v1[255],v2[255],sy1,sy2;
void solve1(int l,int r,int k,int d){
	if(!k)return;
	if(l==r){
		G[s1[l]]=d;v1[l]=1;--sy1;
		return;
	}
	int mid=(l+r)>>1;
	int al=0,ar=0;
	for(int i=l;i<=mid;++i)al+=v1[i];
	for(int i=mid+1;i<=r;++i)ar+=v1[i];
	if(al<mid-l+1)solve1(l,mid,(mid-l+1-al==sy1?1:query1(l,mid,d)),d);
	if(ar<r-mid)solve1(mid+1,r,(r-mid+1-ar==sy1?1:query1(mid+1,r,d)),d);
}
void solve2(int l,int r,int k,int d){
	if(!k)return;
	if(l==r){
		G[s2[l]]=d;v2[l]=1;--sy2;
		return;
	}
	int mid=(l+r)>>1;
	solve2(l,mid,(mid-l+1-al==sy2?1:query2(l,mid,d)),d);
	solve2(mid+1,r,(r-mid+1-ar==sy2?1:query2(mid+1,r,d)),d);
}
vector<int>find_colours(int N,vector<int>X,vector<int>Y){
	n=N;m=X.size();
	C.resize(n);G.resize(n);
	for(int i=0;i<m;++i)u[i]=X[i],v[i]=Y[i];
	for(int i=0;i<n;++i)fa[i]=i;
	for(int i=1;i<n;++i){
		I=i;
		for(int j=0;j<i;++j)gg[j].clear();
		for(int j=0;j<i;++j){
			gg[findfather(j)].emplace_back(j);
		}
		tt=0;
		for(int j=0;j<i;++j)if(gg[j].size())ss[++tt]=j;
		solve(1,tt,query(1,tt));
	}
	for(int j=0;j<n;++j)gg[j].clear();
	for(int j=0;j<n;++j){
		gg[findfather(j)].emplace_back(j);
	}
	for(int i=0;i<n;++i)g[i].clear();
	for(int i=0;i<m;++i)if(findfather(u[i])!=findfather(v[i])){
		int fu=fa[u[i]],fv=fa[v[i]];
		g[fu].emplace_back(fv);
		g[fv].emplace_back(fu);
	}
	int r=findfather(0);
	for(int i=0;i<n;++i)vist[i]=0;
	dep[r]=0;dfs(r);
	int t1=0,t2=0;
	for(int i=0;i<n;++i)if(fa[i]==i){
		if(dep[i]%2)s1[++t1]=i;
		else s2[++t2]=i;
	}
	if(t1+t2==1){
		for(int i=0;i<n;++i){
			for(int j=0;j<n;++j)G[j]=(j==0?-1:i);
			if(perform_experiment(G)==1){
				for(int j=0;j<n;++j)G[j]=i;
				break;
			}
		}
		return G;
	}
	for(int i=1;i<=t1;++i)v1[i]=0;
	for(int i=1;i<=t2;++i)v2[i]=0;
	for(int i=0;i<n;++i)p[i]=i;
	mt19937 mt(1377);
	shuffle(p,p+n,mt);
	sy1=t1;sy2=t2;
	for(int dd=0;dd<n;++dd){
		int d=p[dd];
		if(t1)solve1(1,t1,query1(1,t1,d),d);
		if(t2)solve2(1,t2,query2(1,t2,d),d);
	}
	for(int i=0;i<n;++i)G[i]=G[fa[i]];
	return G;
}
#ifndef ONLINE_JUDGE
int main(){
	int n=10;
	mt19937 mt(time(0));
	for(int i=0;i<n;++i)a[i]=mt()%n;
	vector<int>X(n-1),Y(n-1);
	for(int i=0;i<n-1;++i){
		X[i]=i,Y[i]=i+1;
	}
	auto ans=find_colours(n,X,Y);
	for(int i=0;i<n;++i)assert(a[i]==ans[i]);
	system("sphinx");
	return 0;
}
#endif

Details

answer.code:2: warning: "ONLINE_JUDGE" redefined
    2 | #define ONLINE_JUDGE
      | 
<command-line>: note: this is the location of the previous definition
answer.code: In function ‘void solve2(int, int, int, int)’:
answer.code:108:31: error: ‘al’ was not declared in this scope; did you mean ‘l’?
  108 |         solve2(l,mid,(mid-l+1-al==sy2?1:query2(l,mid,d)),d);
      |                               ^~
      |                               l
answer.code:109:33: error: ‘ar’ was not declared in this scope; did you mean ‘r’?
  109 |         solve2(mid+1,r,(r-mid+1-ar==sy2?1:query2(mid+1,r,d)),d);
      |                                 ^~
      |                                 r