【t084】数列
Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
一个数列定义如下:f(1) = 1,f(2) = 1,f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7。给定A,B和n的值,要求计算f(n)的
值。
说明:若输入样例为1 2 10,则输出为5。
【数据规模】
20%的数据,n≤1,000
40%的数据,n≤100,000
100%的数据,n≤100,000,000
【输入格式】
输入文件(sequence.in)仅一行包含3个整数A,B和n,其中(1≤ A, B ≤1000, 1 ≤n≤100,000,000)。
【输出格式】
输出文件(sequence.out)仅一行,一个整数,即f(n)的值。
Sample Input
1 1 3
Sample Output
2
【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t084
【题解】
考虑f[i-1]和f[i]
f[i-1]有7种可能,f[i]也有7种可能;
而一旦出现了{f[i-1],f[i]}这样的有序对,之前出现过的情况;
那么就出现了循环节.(因为f[i-1],f[i]和之前的某一刻相同了,那么f[i+1]肯定也和前面的某一刻相同.至此变成循环的了);
大概是某种理论什么的吧.
最后一定又会出现{f[i-1],f[i]}={1,1}的情况;
那么处理出这个循环节即1..i-2为一个循环;
最后取模输出一下就好;
(也比较好想到和循环节有关啦)
(只是最后一定都能得到{1,1}吗,有没有可能最后到了另外一个循环节里面?)
(是不是和AX+BY这种变化本身有关,是线性的,所以最后又能回来?)
【完整代码】
#include <cstdio>
#define rep1(i,x,y) for (int i = x;i <= y;i++)
#define rei(x) scanf("%d",&x)
int n,a,b,r =0;
int f[100000];
int main()
{
rei(a);rei(b);rei(n);
f[1] = 1;f[2] = 1;
rep1(i,3,50000)
{
f[i] = (a*f[i-1]+b*f[i-2])%7;
if (f[i]==1 && f[i-1]==1)
{
r = i-2;
break;
}
}
f[0] = f[r];
printf("%d\n",f[n%r]);
return 0;
}
【t084】数列的更多相关文章
- C#求斐波那契数列第30项的值(递归和非递归)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- BZOJ1500[NOI2005]维修数列
Description Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目.第2行包含N个数字,描述初始时的数列.以下M行,每行一 ...
- PAT 1049. 数列的片段和(20)
给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列{0.1, 0.2, 0.3, 0.4},我们有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1 ...
- 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)
对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...
- fibonacci数列(五种)
自己没动脑子,大部分内容转自:http://www.jb51.net/article/37286.htm 斐波拉契数列,看起来好像谁都会写,不过它写的方式却有好多种,不管用不用的上,先留下来再说. 1 ...
- js中的斐波那契数列法
//斐波那契数列:1,2,3,5,8,13…… //从第3个起的第n个等于前两个之和 //解法1: var n1 = 1,n2 = 2; for(var i=3;i<101;i++){ var ...
- 洛谷 P1182 数列分段Section II Label:贪心
题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: [4 ...
- 剑指Offer面试题:8.斐波那契数列
一.题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二.效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...
- 代码的坏味道(4)——过长参数列(Long Parameter List)
坏味道--过长参数列(Long Parameter List) 特征 一个函数有超过3.4个入参. 问题原因 过长参数列可能是将多个算法并到一个函数中时发生的.函数中的入参可以用来控制最终选用哪个算法 ...
随机推荐
- CISP/CISA 每日一题 13
监控信息系统人员所提供服务的效率和效果的工具: 1.例外报告:识别所有没有成功完成的或出了故障的应用 2.作业重运行报告:大多数异常终止作业都会导致重起 3.操作员问题报告:记录计算机运行问题及解决方 ...
- 不重新启动VMWare虚拟机加入虚拟磁盘的方法(上)
近期因为业务须要在不重新启动系统的前提下对系统进行扩容,前提是该系统做过lvm.可是没有足够的物理卷(硬盘),所以引出了改文.本文共分为上下两部分.这是第一部分. 文件夹 加入磁盘 做LVM 加入硬盘 ...
- rocketmq事务消息入门介绍
说明 周五的时候发了篇:Rocketmq4.3支持事务啦!!!,趁着周末的时候把相关内容看了下,下面的主要内容就是关于RocketMQ事务相关内容介绍了. 说明: 今天这篇仅仅是入门介绍,并没有涉及到 ...
- Vue使用Promise自定义confirm确认框组件
使用Promise模拟浏览器确认框,可自定义标题,内容,按钮文字和类型 参数名 类型 说明 title String 标题 content String 内容 yesBtnText String 确认 ...
- vue <input type="file">上传图片、预览、删除
使用原生<input type="file">上传图片.预览.删除:multiple实现可上传多张 参数名 类型 说明 fileTypes Array 文件类型, 默认 ...
- vc如何让打开的子窗口默认是最大化的
vc如何让打开的子窗口默认是最大化的 浏览: 3554 | 更新: 2011-04-09 17:04 1 0 加入杂志加入杂志 摘要:关于vc如何让打开的子窗口默认是最大化的深入研究. 步 ...
- ECMall 25个 数据库表 说明文档
ecm_acategory //文章分类表 字段 类型 Null 默认 注释 cate_id int(10) 否 自增ID号,分类ID号 cate_name varchar(100) 否 分类 ...
- 使用VHD,让Win XP和 Win2003 运行在内存中
通过一定的手段可以让XP和2003甚至Win7运行在内存中.我很感兴趣,于是按照网上的资料在VBox虚拟机中测试了一次,运行成功.这几天将其折腾到实体机上. 声明:我的做法和网上的做法有些不一样,我的 ...
- POJ 3134 - Power Calculus (IDDFS)
题意:求仅仅用乘法和除法最快多少步能够求到x^n 思路:迭代加深搜索 //Accepted 164K 1094MS C++ 840B include<cstdio> #include< ...
- js 小数乘积位数太长
function accMul(arg1,arg2) { var m=0,s1=arg1.toString(),s2=arg2.toString(); try{m+=s1.split(".& ...