51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
来源:互联网 发布:阿里巴巴阿里云事业部 编辑:程序博客网 时间:2024/05/22 02:10
题目:
看起来比较难,范围10^9 O(n)都过不了,但是仅仅是看起来。(虽然我WA了7次 TLE了3次,被自己蠢哭)
我们观察到 0 <= f[i] <= 6 就简单了,就像小学初中学的找到循环节然后求第n项。
我们只用记录下两个连续的数字重复出现,就找到了循环节,然后就简单了。
注意:MOD函数是用于返回两数相除的余数,返回结果的符号与除数(divisor)的符号相同。(来自百度百科) ,mod结果正负所以要与7正负相同。
代码(详细注释):
#include <bits\stdc++.h>using namespace std;typedef long long ll;int f[10000]; // 存递推项。int v[10][10]; // v[i][j]表示 f[k-1]和f[k]出现的位置,第二次出现就找到了循环节了。int main() { int a,b,n; cin >> a >> b >> n; int round ; // 循环节长度 f[1] = f[2] = 1; v[1][1] = 1; // 1,1连续出现的位置是1 int start; // 循环节开始的位置-1。 for(int i = 3;; i++){ f[i] = ((a*f[i-1] + b*f[i-2])%7+7)%7; // 让f[i]变成层正数。// cout << "i: " << i << " f: " << f[i] << endl; if(i == n){ cout << f[i] << endl; // 如果求出循环节之前求出了答案,直接输出。 return 0; } if(v[f[i-1]][f[i]] == 0){ v[f[i-1]][f[i]] = i-1; // f[i-1],f[i]第一次出现 }else{ // 第二次出现 round = i-1-v[f[i-1]][f[i]]; // 循环节长度 start = v[f[i-1]][f[i]]-1; // 循环节开始的位置-1。 break; } } n -= start; // 减去不在循环节之内的部分。 n = n % round; // 求出n在循环节中的位置。 //已知的循环节从 start+1 - start+round。 if(n == 0) cout << f[start+round] << endl; else cout << f[start+n] << endl; return 0;}//written by zhangjiuding.
阅读全文
0 0
- 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
- 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
- 51nod 求递推序列的第N项(矩阵快速幂、模拟求循环长度)
- 51NOD 1126求递推序列的第N项 模拟找循环节
- 51Nod-1126 求递推序列的第N项【递推序列+模除】
- [51NOD]1126 求递推序列的第N项 [线性递推关系与矩阵乘法]
- 51nod oj 1126 求递推序列的第N项【寻找循环节】
- 51nod 1126 求递推序列的第N项(循环节)
- 51nod 1126 求递推序列的第N项(矩阵快速幂、循环)
- 【51nod 1126】求递推序列的第N项 【矩阵快速幂】or【枚举找循环节】
- 1126 求递推序列的第N项(51nod)
- 51nod 1126 求递推序列的第N项
- 51nod 1126 求递推序列的第N项
- 51nod 1126 求递推序列的第N项
- 51nod-【1126 求递推序列的第N项】
- 51Nod 1126 求递推序列的第N项
- 【51Nod】1126 求递推序列的第N项
- 51nod 1126 求递推序列的第N项
- 关于JetBrains CLion 激活 (CLion License Activation)的解决办法,带hosts详细修改
- springmvc传参问题
- 《你只是看起来很努力》——阅读笔记
- 51nod 1451 合法三角形 判斜率去重,时间复杂度O(n^2)
- (转)获取 request 中用POST方式"Content-type"是"application/x-www-form-urlencoded;charset=utf-8"发送的 json 数据
- 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
- (转)java代码发送JSON格式的httpPOST请求
- 58. Length of Last Word —— Java
- 转载自 http://blog.csdn.net/bieleyang/article/details/76973220
- request中获取post的json对象数据content-type=“text/plain”
- 51 nod 1521 一维战舰 时间复杂度O(n),同 Codeforces 567D. One-Dimensional Battle Ships 有详细注释
- 将JavaApplication注册成windows服务
- 软工实践第一篇随笔-准备
- Mybatis insert时返回自增id