Cod sursa(job #340566)

Utilizator mihai_floreaFlorea Mihai Alexandru mihai_florea Data 15 august 2009 13:14:59
Problema Koba Scor 60
Compilator c Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <stdio.h>
int N,t1,t2,t3,a[10][10][10],X,Y,p1,p2,p3;
int solve()
{
    if (N==1) return t1;
    if (N==2) return t1+t2;
    if (N==3) return t1+t2+t3;
    int s=0,i,t=0;
    if (X==1) s=t1;
    else if (X==2) s=t1+t2;
    else if (X==3) s=t1+t2+t3;
    else
    {
       s=t1+t2+t3;
       for (i=4;i<=X;++i)
       {
           t=(t3+t1*t2)%10;
           t1=t2;t2=t3;t3=t;
           s+=t;
       }
    }
    int k=(N-X)/Y;
    int sp=p1+p2+p3;
    t1=p1;t2=p2;t3=p3;
    for (i=4;i<=Y;++i)
    {
        t=(p3+p2*p1)%10;
        p1=p2;p2=p3;p3=t;
        sp+=t;
    }
    s+=sp*k;
    int r=N-X-Y*k;
    if (r==1) s+=t1;
    else if (r==2) s+=t1+t2;
    else if (r==3) s+=t1+t2+t3;
    else 
    if (r>=4)
    {
        s+=t1+t2+t3;
        for (i=4;i<=r;++i)
        {
            t=(t3+t2*t1)%10;
            t1=t2;t2=t3;t3=t;
            s+=t;
        }
    }
    return s;
}
    
        
int main()
{
    int i,x,A,B,C;
    fscanf(fopen("koba.in","r"),"%d %d %d %d",&N,&t1,&t2,&t3);
    t1%=10;t2%=10;t3%=10;
    A=t1;B=t2;C=t3;
    a[t1][t2][t3]=1;
    for (i=4;i<=N;++i)
    {
        x=(t3 + t2*t1)%10;
        t1=t2;t2=t3;t3=x;
        if (!a[t1][t2][t3]) a[t1][t2][t3]=i-2;
        else 
        {
             p1=t1;p2=t2;p3=t3;
             X=a[t1][t2][t3]-1;
             Y=i-2-a[t1][t2][t3];
             break;
        }
    }
    t1=A;t2=B;t3=C;
    fprintf(fopen("koba.out","w"),"%d",solve());
    return 0;
}