这个题用快排就超时了,由于他们的数是有范围的,所以只要将他们的数作为数组下标让他们加上一(先要将数组初始化为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;
}

posted on 2012-05-26 16:08  xinmenghuairi  阅读(164)  评论(0编辑  收藏  举报