2015年2月15日 星期日

2015/02/15 HDU 1005 Number Sequence

// http://acm.hdu.edu.cn/showproblem.php?pid=1005
#include <iostream>
#include <cstdio>

using namespace std;

int A, B, N;

int F[60]; int appear[60];

int main()
{

    while( scanf("%d %d %d", &A, &B, &N) )
    {
        if( !A && !B && !N ) break;

        F[1] = F[2] = 1;

        int i = 3;

        fill(appear, appear+60, 0);

        int st; int cir;

        while( i <= N )
        {
            if( appear[F[i-1]*7+F[i-2] ] )
            {
                st = appear[F[i-1]*7+F[i-2] ];
                cir = i-st;
                break;
            }

            F[i] = (A*F[i-1]+B*F[i-2])%7;
            appear[F[i-1]*7+F[i-2] ] = i;
            i++;
        }

        if( i <= N )
        {
            printf("%d\n", F[st+(N-st)%cir]);
        }
        else printf("%d\n", F[N]);
    }
}

沒有留言:

張貼留言