HDU 1005(AC代码)

 1 #include <stdio.h>
 2 #include <string.h>
 3 int main()
 4 {
 5     int a,b,n;
 6     int i;
 7     int f[52]={0};
 8     f[0]=1;
 9     f[1]=1;
10     while(scanf("%d %d %d",&a,&b,&n)!=EOF){
11         if(a==0){
12             break;
13         }
14         for(i=2;i<52;i++){
15             f[i]=(a*f[i-1]+b*f[i-2])%7;
16         }
17         if(n<=52){
18             printf("%d\n",f[n-1]);
19         }
20         else{
21             printf("%d\n",f[(n-52)%48+3]);
22         }
23     }
24     return 0;
25 }

因为n可能比较大,它决定了递归的层数,所以不能够用递归了,因为栈可能容不下这么大。

否则用递归是一件很轻松的事。

那么得寻找规律:

每个f(n)的结果与f(n-1)和f(n-2)有关

而f(n-1)只可能是0~6其中的一个,所以共7种(除了f(1)和f(2))

而f(n-2)也是0~6其中的一个,也共7种(除了f(1)和f(2))

那么f(n)的结果也只会是0~6之间的一个数

按照a和b的大小,每个f(n)的结果都是[(a倍0~6)+(b倍0~6)]%7

设x=f(n-1)和y=f(n-2),那么可能出现的组合有:
(0,0) (0,1) (0,2) (0,3) (0,4) (0,5) (0,6)
(1,0) (1,1) (1,2) (1,3) (1,4) (1,5) (1,6)
(2,0) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6)
(3,0) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6)
(4,0) (4,1) (4,2) (4,3) (4,4) (4,5) (4,6)
(5,0) (5,1) (5,2) (5,3) (5,4) (5,5) (5,6)
(6,0) (6,1) (6,2) (6,3) (6,4) (6,5) (6,6)

以数组a[100]来测试,a[0]=1,a[1]=1,以下是100个数的后48*2个,即a[4]~a[99],其中a[4]~a[51]为一个周期,a[52]~a[99]可以看出又是另一个周期。(自己测试前100个即可)

总结:

以代码中的f[100]这个数组来讲,f[0]~f[3]是没规律的,如果给这几个数,直接输出即可。

f[4]~f[51]是第一个周期内的所有数据,共48个。f[52]~[99]、f[100]~f[147].....类推下去

如果n<=52那么直接输出就行了,如果大于52,那么就要对应到f[4]~f[51]中的一个数了。

时间: 2024-10-09 21:53:52

HDU 1005(AC代码)的相关文章

矩阵快速幂AC代码HDU 2035

#include <iostream> using namespace std;const int MOD = 1000;//像这样的一个常量就应该专门定义一下 int PowMod(int a, int n)//a^n%MOD { int ret = 1; while(n) { if(n & 1) ret = ret * a % MOD; //变为二进制,然后就可以专门进行分解计算,十分的方便,要求是结合位运算一同使用 a = a * a % MOD; //这里要求特别的注意,因为是

HDU 1011 Starship Troopers星河战队(AC代码)树形dp

这个没有考虑过多东西的代码也是AC了. 1 #include <iostream> 2 #include <vector> 3 #define limit 110 4 using namespace std; 5 6 vector<int> vect[limit]; 7 int n,m; 8 bool vis[limit]; 9 int bug[limit],pos[limit]; 10 int dp[limit][limit]; 11 12 int max(int a

HDU 1005 Number Sequence【多解,暴力打表,鸽巢原理】

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 175657    Accepted Submission(s): 43409 Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A

HDU 2896 AC自动机 + 细心

病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10478    Accepted Submission(s): 2724 Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋——我们能在有生之年看到500年一遇的世界奇观,那是多么幸福的事儿

【南阳OJ分类之语言入门】80题题目+AC代码汇总

声明: 题目部分皆为南阳OJ题目. 代码部分包含AC代码(可能不止一个)和最优代码,大部分都是本人写的,并且大部分为c代码和少部分c++代码and极少java代码,但基本都是c语言知识点,没有太多差别,可能代码有的写的比较丑,毕竟知识有限. 语言入门部分题基本都较为简单,是学习编程入门的很好练习,也是ACM的第一步,入门的最佳方法,望认真对待. 本文由csdn-jtahstu原创,转载请注明出处,欢迎志同道合的朋友一起交流学习.本人QQ:1373758426和csdn博客地址. now begi

hdu 3065 AC自动机(各子串出现的次数)

病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10324    Accepted Submission(s): 3633 Problem Description 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的“万恶之源”.这是一个庞大的病毒网站,他有着好多好多的病毒,但

HDU 4518 ac自动机+数位dp

吉哥系列故事--最终数 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 304    Accepted Submission(s): 102 Problem Description 在2012年腾讯编程马拉松比赛中,吉哥解决了一道关于斐波那契的题目,这让他非常高兴,也更加燃起了它对数学特别是斐波那契数的热爱.现在,它又在思考一个关于斐波那契

HDU 1005 Number Sequence (数学规律)

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 104190    Accepted Submission(s): 25232 Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A

hdu 4057 AC自动机+状态压缩dp

http://acm.hdu.edu.cn/showproblem.php?pid=4057 Problem Description Dr. X is a biologist, who likes rabbits very much and can do everything for them. 2012 is coming, and Dr. X wants to take some rabbits to Noah's Ark, or there are no rabbits any more.

【南阳OJ分类之大数问题】题目+AC代码汇总

声明:题目部分皆为南阳OJ题目,代码部分包含AC代码(可能不止一个)和标程. 由于大数问题用c/c++写比较麻烦,而Java的大数类又很好用,所以基本为java代码.实际上竞赛很少会考大数问题,因为竞赛是比的算法,而不是语言特性,不过很多都是大数据,数据上千万级别的,所以算法又很关键,显然那和这篇博客也没啥关系. 题目不是太难,大家和本人就权当学习或复习下Java吧O(∩_∩)O~. 该分类南阳oj地址:http://acm.nyist.edu.cn/JudgeOnline/problemset