HDU_1005 Number Sequence(math)

来源:互联网 发布:喜马拉雅电台 知乎 编辑:程序博客网 时间:2024/06/05 09:35

题目请点我
题意:
简单的暴力果然是不可行的,一定会是有规律的。因为A,B固定,并且Lis[i]统一对7取余,所以Lis[i],Lis[i-1]最多有49种可能,找到循环次数就可以了。以后对于这种递推数列应该更加敏感一点~
代码实现:

#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#define MAX 55using namespace std;int N;int St;int len;int A,B;bool flag;int Lis[MAX];int main(){    while( scanf("%d%d%d",&A,&B,&N) != EOF ){        if( A == 0 && B == 0 && N == 0 ){            break;        }        St = N;        len = 7;        flag = false;        Lis[0] = Lis[1] = Lis[2] = 1;        for( int i = 3; i <= N; i++ ){            Lis[i] = (A*Lis[i-1]+B*Lis[i-2])%7;            for( int j = 2; j < i; j++ ){                if( Lis[j] == Lis[i] && Lis[j-1] == Lis[i-1] ){                    flag = true;                    len = i-j;                    St = j;                }            }            if( flag ){                break;            }        }        printf("%d\n",Lis[St+(N-St)%len]%7);    }    return 0;}
0 0
原创粉丝点击