51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
题目:

看起来比较难,范围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[]; // 存递推项。
int v[][]; // v[i][j]表示 f[k-1]和f[k]出现的位置,第二次出现就找到了循环节了。
int main() {
int a,b,n;
cin >> a >> b >> n;
int round ; // 循环节长度
f[] = f[] = ;
v[][] = ; // 1,1连续出现的位置是1
int start; // 循环节开始的位置-1。
for(int i = ;; i++){
f[i] = ((a*f[i-] + b*f[i-])%+)%; // 让f[i]变成成正数。
// cout << "i: " << i << " f: " << f[i] << endl;
if(i == n){
cout << f[i] << endl; // 如果求出循环节之前求出了答案,直接输出。
return ;
}
if(v[f[i-]][f[i]] == ){
v[f[i-]][f[i]] = i-; // f[i-1],f[i]第一次出现
}else{
// 第二次出现
round = i--v[f[i-]][f[i]]; // 循环节长度
start = v[f[i-]][f[i]]-; // 循环节开始的位置-1。
break;
}
}
n -= start; // 减去不在循环节之内的部分。
n = n % round; // 求出n在循环节中的位置。 //已知的循环节从 start+1 - start+round。
if(n == ) cout << f[start+round] << endl;
else cout << f[start+n] << endl;
return ;
}
//written by zhangjiuding.
51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释的更多相关文章
- 51nod 1126 求递推序列的第N项 && hdu - 1005 Number Sequence (求周期)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1126 http://acm.hdu.edu.cn/showproblem ...
- 51nod1126 求递推序列的第N项【递推】
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...
- 51nod 1126 求递推序列的第N项
1126 求递推序列的第N项 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 有一个序列是这样定义的:f(1) = 1, f(2) = 1, f( ...
- 51nod1126 求递推序列的第N项
求递推序列的第N项 有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的 ...
- 51nod 1126 - 求递推序列的第N项 - [找规律]
题目链接:https://cn.vjudge.net/problem/51Nod-1126 有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + ...
- 51Nod 1126 求递推序列的第N项(矩阵快速幂)
#include <iostream> #include <algorithm> #include <cmath> #define MOD 7 #define N ...
- [51nod 1126] 求递推序列的第N项 - 矩阵乘法
#include <bits/stdc++.h> using namespace std; #define int long long const int mod = 7; struct ...
- 515Nod 1126 求递推序列的第n项【矩阵快速幂】
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...
- [51NOD1126]求递推序列的第n项(矩阵快速幂)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1126 存在参数a,b为负数的情况.这时候要这么处理: 根据mo ...
随机推荐
- UIButton和UIimageView
1.按钮控件使用的类是UIButton 点击按钮会触发某个事件 2.按钮控件的初始化 UIButton *button = [UIButton buttonWithType:UIButtonTypeC ...
- Unity3D安装破解教程(以Unity5.3.4为例)(转)
Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎.目 ...
- mha 复制检查报错“There is no alive server. We can't do failover”
安装mha所参考的文章: http://linzhijian.blog.51cto.com/1047212/1906434 http://www.cnblogs.com/xiaoboluo768/p/ ...
- C# 文件的操作
C#对文件的操作相当方便,主要涉及到四个类:File.FileInfo.Directory.DirectoryInfo,前两个提供了针对文件的操作,后两个提供了针对目录的操作,类图关系如上图所示; 下 ...
- 九度OJ 1006 ZOJ
#include <iostream> #include <string> using namespace std; int getO(string str,int & ...
- MySQL (七)--视图、数据库备份和还原
1 视图 视图:View,是一种有结构(有行有列)但是没结果(结构中不真实存放的数据)的虚拟表,虚拟表的结构来源不是自己定义,而是从对应的基表中产生(视图的数据来源). 示例脚本: CREATE TA ...
- 软件工程(GZSD2015)学生博客列表
2015年贵州师范大学软件工程课程学生博客列表 陈小丽 郑倩 唐洁 周娟 李利思 肖俊 罗文豪 周静 徐明艳 毛涛 邓洪虹 岳庆 李盼 安坤 何亚 涂江凤 张义平 杨明颢 杨家堂 胡贵玲 寿克霞 吴明 ...
- 团队作业8——第二次项目冲刺(Beta阶段)日志集合处
Beta版本冲刺 http://www.cnblogs.com/vviane1/p/6886049.html 第一天(2017.05.22) http://www.cnblogs.com/vviane ...
- 201521123107 《Java程序设计》第10周学习总结
第10周作业-异常与多线程 1.本周学习总结 2.书面作业 1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? 只有try块中 ...
- 团队作业8——第二次项目冲刺(Beta阶段)Day6——5.25
1.提供当天会议照片: 2.会议的内容: (1)讨论已经完成的功能,讨论存在的问题 (2)对于界面,谈谈各自的看法 (3)讨论接下来的任务和改进的地方 3.工作安排: 队员 今日任务 明日任务 贡献比 ...