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

找规律/hdu 1005 Number Sequence

时间:2014-10-15 23:32:01      阅读:326      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   for   strong   sp   数据   div   

题意

  给出a,b,n,已知f[1]=f[2]=1,f[i]=(a*f[i-1]+b*f[i-2]) mod 7

  输出f[n]

  数据范围 1 <= A, B <= 1000, 1 <= n <= 100,000,000

分析

  首先,直接求..肯定是不行的 会tle 会mle 

  但是可以找到规律,例如对a=1,b=1 这个数据,有

  f1=1  f2=1  f3=3

  f4=5  f5=4  f6=0

  f7=1  f8=1  f9=3

  f10=5  f11=4  f12=0

  ????

  我们会发现有一定的规律:每当遇到1, 1 时,就代表一次新的周期,所以我们只需求出周期t以及一个周期的答案,f[n mod t]即为答案

  关于利用循环查找周期:保险起见,我循环到10000来查找,但是过后查看别人的题解,发现循环到49即可,但具体证明未能找到

 

Accepted Code

 1 /*
 2     PROBLEM:hdu1005
 3     AUTHER:NicoleLam
 4     MEMO:找规律
 5 */
 6 
 7 #include<cstdio>
 8 using namespace std;
 9 const int N=100;
10 int f[N];
11 
12 int main()
13 {
14     int a,b,n;
15     scanf("%d%d%d",&a,&b,&n);
16 
17     while ((a!=0) && (b!=0) && (n!=0))
18     {
19         f[1]=1,f[2]=1;
20         int i;
21         for (i=3;i<100;i++)
22         {
23             f[i] = (a*f[i-1] + b*f[i-2])  %  7;
24 
25             if ( f[i-1]==1 && f[i]==1) break;
26         }
27         n=n%(i-2);
28         f[0]=f[i-2];
29         printf("%d\n",f[n]);
30         scanf("%d%d%d",&a,&b,&n);
31     }
32     return 0;
33 }

 

找规律/hdu 1005 Number Sequence

标签:style   blog   color   io   for   strong   sp   数据   div   

原文地址:http://www.cnblogs.com/NicoleLam/p/4027507.html

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