求助,悬赏关注
查看原帖
求助,悬赏关注
676598
ahumannickname楼主2023/8/1 11:55

代码,一直找不到hack数据,CF显示wrong answer on test 2

#include<iostream>
#include<cmath> 
#include<vector> 
using namespace std;
long long n;
long long a[45];
vector<vector<long long>>e[2000005];
long long pr[45];
long long sz[45];
bool flag=false;
void inie()
{
	for(long long i=1;i<=2000000;i++)
	{
		long long tmp=e[i].size();
		for(long long j=0;j<tmp;j++)
		{
			e[i].pop_back();
		}
	}
}
void init()
{
	for(long long i=1;i<=n;i++)
	{
		pr[i]=i;
		sz[i]=1;
	}
	flag=false;
}
long long fnd(long long b)
{
	if(pr[b]==b)
	{
		return b;
	}
	return pr[b]=fnd(pr[b]);
}
void unn(long long b,long long c)
{
	if(fnd(b)==fnd(c))
	{
		return;
	}
	if(sz[pr[b]]<sz[pr[c]])
	{
		sz[pr[c]]=sz[pr[c]]+sz[pr[b]];
		pr[pr[b]]=pr[c];
		if(sz[pr[c]]>=(n+1)/2)
		{
			flag=true;
		}
	}
	else
	{
		sz[pr[b]]=sz[pr[b]]+sz[pr[c]];
		pr[pr[c]]=pr[b];
		if(sz[pr[b]]>=(n+1)/2)
		{
			flag=true;
		}
	}
}
void pub(long long b,long long c,long long tmp)
{
	vector<long long>emp;
	emp.push_back(b);
	emp.push_back(c);
	e[tmp].push_back(emp);
}
void pb(long long b,long long c)
{
	long long tmp=abs(a[b]-a[c]);
	if(tmp==0)
	{
		pub(b,c,0);
	}
	for(long long i=1;i*i<=tmp;i++)
	{
		if(tmp%i==0)
		{
			pub(b,c,i);
			if(i*i!=tmp)
			{
				pub(b,c,tmp/i);
			}
		}
	}
}
int main()
{
	long long v;
	cin>>v;
	for(long long u=1;u<=v;u++)
	{
		inie();
		cin>>n;
		for(long long i=1;i<=n;i++)
		{
			cin>>a[i];
		}
		for(long long i=1;i<=n;i++)
		{
			for(long long j=i+1;j<=n;j++)
			{
				pb(i,j);
			}
		}
		init();
		long long ans;
		for(long long j=0;j<e[0].size();j++)
		{
			unn(e[0][j][0],e[0][j][1]);
			if(flag)
			{
				cout<<-1<<endl;
				break;
			}
		}
		if(flag)
		{
			continue;
		}
		for(long long i=2000000;i>=1;i--)
		{
			for(long long j=0;j<e[i].size();j++)
			{
				unn(e[i][j][0],e[i][j][1]);
				if(flag)
				{
					ans=i;
					break;
				}
			}
			if(flag)
			{
				break;
			}
			if(e[i].size()>0)
			{
				init();
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}

以下是我所使用的制造数据的代码

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
	srand(time(0));
	int t=rand()%10+1;
	cout<<t<<endl;
	for(int i=1;i<=t;i++)
	{
		int n=rand()%19*2+4;
		cout<<n<<endl;
		for(int j=1;j<=n;j++)
		{
			int a=rand()%2000001-1000000;
			cout<<a;
			if(j<n)
			{
				cout<<" ";
			}
			else
			{
				cout<<endl;
			}
		}
	}
	return 0;
}
2023/8/1 11:55
加载中...