HDU1005Number Sequence
来源:互联网 发布:新闻网页源码 编辑:程序博客网 时间:2024/06/05 23:14
A number sequence is defined as follows:
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n).
Input
The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.
Output
For each test case, print the value of f(n) on a single line.
Sample Input
1 1 3
1 2 10
0 0 0
Sample Output
2
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n).
Input
The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.
Output
For each test case, print the value of f(n) on a single line.
Sample Input
1 1 3
1 2 10
0 0 0
Sample Output
2
5
这个题不能暴力循环,一是时间超出限制,二是明显有个%7——就在提醒我们有个内部循环节(否则为什么不mod1000000007)
关键在于找循环长度
由递推公式可以知道如果连续两个数值和前面连续两个数重复那么就找到了循环节了(两个数就可以确定第三个数了)
而且循环节的起始点不一定是第一个数,所以输入的n应该减去非循环部分,所以j的生存域得大一点
#include<iostream>#include<algorithm>#include<memory.h>using namespace std;int findreg[1010];int main(){int a,b;int n;//int num1 ;//int num2 ;//int num3;while(cin>>a>>b>>n){if(a == 0 && b == 0 && n == 0)break;int j;int retur = 0;memset(findreg,0,sizeof(findreg));findreg[1] = 1;findreg[2] = 1;if(n == 1 || n == 2){cout<<"1"<<endl;continue;}else{for(int i = 3;i <= 10005;i++){findreg[i] = (a * findreg[i - 1] + b * findreg[i - 2]) % 7;for(j = 2;j < i;j++){if(findreg[i] == findreg[j] && findreg[i - 1] == findreg[j - 1]){retur = i - j;break;}//遍历去找循环节 }if(retur){break;}}if(n < j){cout<<findreg[n]<<endl;}else{cout<<findreg[(n - j) % retur + j]<<endl;//开头不是循环节的地方要减去 }}}return 0;}
阅读全文
0 0
- hdu1005Number Sequence
- hdu1005Number Sequence
- HDU1005Number Sequence
- HDU1005Number Sequence
- HDU1005Number Sequence
- hdu1005Number Sequence(循环节)
- sequence
- SEQUENCE
- Sequence
- sequence
- sequence
- Sequence
- sequence
- sequence
- sequence
- Sequence
- Sequence
- Sequence
- Codeforces Round #449 (Div. 2) 总结(12.2)
- python基础-死锁、递归锁
- Android 浮雕遮罩滤镜(EmbossMaskFilter)
- 使用win10自带虚拟光驱打开ISO镜像文件
- Ardupilot下移植CAN总线驱动
- HDU1005Number Sequence
- 要提高SQL查询效率where语句条件的先后次序应如何写
- 大数据WEB阶段(十一)Ajax、URL编码
- Dollar Dayz
- Php-打印所有错误
- Zk笔记(一):Zookeeper的两种安装和配置(Windows):单机模式与集群模式
- codeforces 708B (数学构造)
- Qt 模型视图编程
- ActiveMQ消息队列的使用学习笔记