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]
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; }
相关文章推荐
- 【Android UI】图片 + 文字展示by SpannableStringBuilder
- iOS开发中的UDID和UUID详解
- hadoop key和value 分隔符号设置
- windows GUI开发00 - 前言
- Repeated DNA Sequences
- 8.RequestHandler的分析---handler是如何工作的
- QuickHit项目(输出字符串游戏)
- 非fastcgi模式实现fastCGI模式的fastcgi_finish_request()
- “Rescue(营救),ZOJ1649”的一种解法和疑惑
- QuickHit游戏
- 第五章项目:QuickHit
- UIKit框架之—— UIButton
- build.version_codes.m 找不到
- FreeRTOS内核详解----Queue
- Build caffe fails on Ubuntu 16.04 (‘memcpy’ was not declared in this scope)
- <s:property="a" value=""/>取的<s:debug></s:debug>中的value stack中的属性值
- createSQLQuery与createQuery的区别
- Duilib扩展—扩展GIF显示
- 强大的原生DOM选择器querySelector和querySelectorAll
- Duilib扩展—双击、右键消息扩展