HDU-1005 Number Sequence

来源:互联网 发布:网络婚姻游戏 编辑:程序博客网 时间:2024/06/04 20:42

分析:由于n是1e8直接暴力是不可能了,观察到取模数是7,所以f[i]取模无非在0~7之间,而A和B是不变的,f[i]由f[i - 1]和f[i - 2]转移过来,最多也就有49种可能,大于它的时候找到循环节输出即可

代码:

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<map>#include<string>#include<vector>using namespace std;const int N  = 1010;int f[60],res[60];int main(){   int a,b,n;    while(scanf("%d%d%d",&a,&b,&n) && a && b && n)    {        memset(f,0,sizeof(f));        memset(res,0,sizeof(res));        f[1] = f[2] = 1;        int flag = 0;        int st,ed;        for(int i = 3; i <= n; i++)        {            f[i] = (a * f[i - 1] + b * f[i - 2]) % 7;           // printf("%d\n",f[i]);            for(int j = 2; j <= i - 1; j++)            {                if(f[j] == f[i] && f[j - 1] == f[i - 1])                {                    st = j - 1;                    ed = i - 1;                    flag = 1;                    break;                }            }            if(flag)break;        }        if(flag)        printf("%d\n",f[(n - ed) % (ed - st) + st]);        else            printf("%d\n",f[n]);    }    return 0;}


原创粉丝点击