- 概率算法
- 每次随机取两个数,有四分之一的概率两个数都在答案中
- 但我赛后想到并在代码中实现的算法并不是这样的……
- 对了,取模真的、真的非常慢
点击查看代码
#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;
}