首页 > 其他分享 >至少一半要相等

至少一半要相等

时间:2024-01-22 21:24:56浏览次数:23  
标签:相等 5005 48 一半 至少 int && -- cc

  • 概率算法
  • 每次随机取两个数,有四分之一的概率两个数都在答案中
  • 但我赛后想到并在代码中实现的算法并不是这样的……
  • 对了,取模真的、真的非常慢
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int h[1000005]; 
int a[5005],c[5005];
int read1()
{
	char cc=getchar();
	while(!(cc>=48&&cc<=57))
	{
		if(cc=='-')
		{
			break;
		}
		cc=getchar();
	}
	bool f=false;
	int s=0;
	if(cc=='-')
	{
		f=true;
	}
	else
	{
		s=cc-48;
	}
	while(1)
	{
		cc=getchar();
		if(cc>=48&&cc<=57)
		{
			s=s*10+cc-48;
		}
		else
		{
			break;
		}
	}
	if(f==true)
	{
		s=-s;
	}
	return s;
}
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		cin>>n;
		int maxn=0;
		for(int i=1;i<=n;i++)
		{
			a[i]=read1();
			maxn=max(maxn,a[i]);
		}
		if(n==2)
		{
			puts("0");
			continue;
		}
		bool f=false;
		for(int k=(maxn-1)/(n/2-1);k>=2;k--)
		{
			for(int i=1;i<=n;i++)
			{
				c[i]=a[i]%k;
				h[c[i]]++;
				if(h[c[i]]>=n/2)
				{
					f=true;
				}
			}
			for(int i=1;i<=n;i++)
			{
				h[c[i]]--;
			}
			if(f==true)
			{
				cout<<k<<endl;
				break;
			}
		}
		if(f==false)
		{
			cout<<1<<endl;
		}
	}
	return 0;
}

标签:相等,5005,48,一半,至少,int,&&,--,cc
From: https://www.cnblogs.com/watersail/p/17981094

相关文章