读书人

HDOJ1005(觅循环节点)

发布时间: 2013-04-12 18:33:12 作者: rapoo

HDOJ1005(找循环节点)

首先,对于网上那些直接说循环点是48的,表示质疑。

因为

(x+y)%7=(x%7+y%7)%7

所以

f[n-1]和f(n-2)的取值范围都是{0,1,2,3,4,5,6}

所以一共49种,由于从0开始,所以是小于等于48,

还要考虑特殊情况,因为对f[n]有影响的还有A和B

当A和B都是7的倍数的时候,则序列为1 1 0 0 0 0 0.....

否则,序列则会按照某个循环节点t不断循环延伸下去

t不一定是48;所以,应该测试。

另附上:

大神的解释


/*HDOJ1005作者:陈佳润2013-04-09*/#include<iostream>using namespace std;int main(){int f[100],a,b,i;long n;f[0]=1;f[1]=1;while(scanf("%d%d%ld",&a,&b,&n)!=EOF&&(a!=0||b!=0||n!=0)){if(a%7==0&&b%7==0)cout<<(n>1?0:1)<<endl;else{for(i=2;i<=48;i++)f[i]=(a*f[i-1]+b*f[i-2])%7;for(i=1;i<=48;i++)if(f[i]==f[0]&&f[i+1]==f[1])break;cout<<f[(n-1)%i]<<endl;}}return 0;}


读书人网 >其他相关

热点推荐