码迷,mamicode.com
首页 > 其他好文 > 详细

HDOJ(1005) Number Sequence

时间:2015-04-28 16:01:33      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

这道题,咋一看很像Fibonacci数列,使用递归或者改进的动态规划来解决。但是仔细一看,(1 <= n <= 100,000,000),使用这些方法,要么超时,要么肯定内存不够用,因此必须想别的办法。遇到这种情况也就只有找规律了。仔细看:f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7,因为存在取模运算,那么当n取到一定值后,f(n)肯定会重复出现。关于找规律的过程,博客园有一位朋友已经进行了详细分析了,请点击链接。下面给出最终的代码:

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int a,b,i;
 6     long long f[55],n;
 7     while(cin>>a>>b>>n)
 8     {
 9         if(a==0&&b==0&&n==0)break;
10         f[1]=f[2]=1;
11         for(i=3;i<=49;i++)
12         f[i]=(a*f[i-1]+b*f[i-2])%7;
13         cout<<f[n%48]<<endl;
14     }
15     return 0;
16 }

 

HDOJ(1005) Number Sequence

标签:

原文地址:http://www.cnblogs.com/xiaomanon/p/4463051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!