首页 > 代码库 > 找规律/hdu 1005 Number Sequence
找规律/hdu 1005 Number Sequence
题意
给出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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。