这个题用快排就超时了,由于他们的数是有范围的,所以只要将他们的数作为数组下标让他们加上一(先要将数组初始化为0),即可自动排序了,只要从下标为0开始找到n/2个数就可以了。
代码:
#include<iostream>
using namespace std;
int a,b,m,x0;
int c[40001];
int main()
{
int x,n,s;
while(scanf("%d%d%d%d%d",&n,&a,&x0,&b,&m)!=EOF)
{
s=0;
memset(c,0,sizeof(c));
if(n==0)
{
printf("0\n");
continue;
}
if(n==1)
{
printf("%d\n",x0);
continue;
}
c[x0]++;
for(int i=1;i<n;i++)
{
x=(x0*a+b)%m;
c[x]++;
x0=x;
}
for(int j=0;;j++)
{
s+=c[j];
if(s>n/2)
{
printf("%d\n",j);
break;
}
}
}
return 0;
}