您的位置:首页 > 产品设计 > UI/UE

X-Sequence

2016-05-29 15:37 411 查看
Let {x i} be the infinite sequence of integers:

1) x 0 = A;

2) x i = (alpha * x i-1^2 + beta * x i-1 + gamma) mod M, for i >= 1.

Your task is to find x k if you know A, alpha, beta, gamma, M and k.
[align=left]
Input[/align]
Given A (1 <= A <= 10000), alpha (0 <= alpha <= 100), beta (0 <= beta <= 100), gamma (0 <= gamma <= 100), M (1 <= M <= 1000), k (0 <= k <= 10^9). All numbers are integer.

[align=left]
Output[/align]
[align=left]Write x k. [/align]
[align=left]
Sample test(s)[/align]

Input
[align=left][/align]



[align=left]1 1 1 1 10 1 [/align]
[align=left][/align]
[align=left][/align]
[align=left]Output [/align]
[align=left][/align]



[align=left]3 [/align]
[align=left][/align]
[align=left][/align]

[align=right][submit][/align]

[align=right][forum][/align]

[align=left]涨姿势了,循环节不一定是在x[0]出开始,要开一个标记数组;[/align]

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long A,a,b,g,M,k;
int main()
{
long long i,t,l;
long long x[1010];
long long vis[11100];
while(~scanf("%lld %lld %lld %lld %lld %lld",&A,&a,&b,&g,&M,&k))
{
memset(vis,-1,sizeof(vis));
x[0]=A;vis[A]=0;
b=b%M;
g=g%M;
for(i=1;;i++){
x[i]=(a*x[i-1]%M*x[i-1]%M+b*x[i-1]%M+g)%M;
if(vis[x[i]]!=-1){
l=i-vis[x[i]];
t=vis[x[i]];
break;
}
else vis[x[i]]=i;
}
if(k<vis[x[i]])cout<<x[k]<<endl;
else cout<<x[(k-t)%l+t]<<endl;;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: