题目链接:http://poj.org/problem?id=2381
解释下题意,依次用(a×c+r)%m取随机数,直到循环,然后求在这些随机数里哪个区间最大,是多少!
这个题我很是郁闷了一晚上,做到完全想不出有什么问题了,还是WA,后来百度直到问的别人,我原来的代码是
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm>
using namespace std; int d[16000002]; int main() { long long int a,c,m,r,i,flag,temp,max; cin>>a>>c>>m>>r; memset(d,0,sizeof(d)); d[r]=1; while(!d[(a*r+c)%m]) { r=(a*r+c)%m; d[r]=1; } temp=0;flag=0;max=-1; for(i=0;i<m;i++) { if(d[i]==1&&flag;==0) flag=1; else if(d[i]==0&&flag;==1) temp++; else if(d[i]==1&&flag;==1) { if(temp>max) max=temp; temp=0; } } cout<<max+1<<endl;
}
|