题目大意
给出x1,a,b,定义xi=(a*xi-1+b)%10001。给出t,x1,x3。。。x2t-1,输出x2,x4。。。x2t(t小于等于100,x小于10001)。
解析
若知a,b即可向下推xn,因为要%10001,所以a,b在0到10000之间,固枚举a,b。暴力硬解即可,时间大约是380ms。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int main(){ int al[1001],t,b,j,x; memset(al,0,sizeof(al)); scanf("%d",&t); for(int i=1;i<=t;i++) scanf("%d",&al[i*2-1]); for(int a=0;a<=10000;a++){ for(int b=0;b<=10000;b++){ x=1; for(j=2;j<=2*t;j++){ if(j%2==1){ if(al[j]!=((a*al[j-1]+b)%10001)){ x=0; break; } } else al[j]=(a*al[j-1]+b)%10001; } if(x==1) break; } if(x==1) break; } for(int i=1;i<=t;i++) printf("%d\n",al[i*2]); return 0; }