Cod sursa(job #163128)

Utilizator razvanelu99Razvan Andrus razvanelu99 Data 21 martie 2008 14:57:40
Problema Koba Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include<fstream.h>
long v[3][1005];
int main()
{
ifstream f("koba.in");
ofstream g("koba.out");
long t1,t2,t3,t11,t22,t33,t4,i,t111,t222,t333,st;
long n,s=0,c,r;
f>>n>>t1>>t2>>t3;
t1=t1%10;
t2=t2%10;
t3=t3%10;
i=3;
if (n>=100000000)
{
s=t1+t2+t3;
t11=t1;
t22=t2;
t33=t3;
v[1][t1*100+t2*10+t3]=1;
//t4=(t1*t2+t3)%10;
//s+=t4;
//t11=t2;
//t22=t3;
//t33=t4;
if (n==1) g<<t1;
if (n==2) g<<t2+t1;
if (n==3) g<<t3+t2+t1;
if (n==4)
  {
  t4=((t1*t2)+t3)%10;
  g<<t1+t2+t3+t4;
  }
if (n>4)
{
//if (n==4) g<<t4+t3+t2+t1;
int cont=2;
do
     {
     t4=(t11*t22+t33)%10;
     t11=t22;
     t22=t33;
     t33=t4;
     if (!v[1][t11*100+t22*10+t33]) v[1][t11*100+t22*10+t33]=cont;
     else {v[2][t11*100+t22*10+t33]=cont;break;}
     cont++;
     } while(!v[2][t11*100+t22*10+t33]);
t111=t1;
t222=t2;
t333=t3;
n-=3;
for (i=4;i<v[1][t11*100+t22*10+t33];i++)
   {
   t4=(t111*t222+t333)%10;
   s+=t4;
   t111=t222;
   t222=t333;
   t333=t4;
   n--;
   }
t111=t11;
t222=t22;
t333=t33;
st=0;
st=t111+t222+t333;
for (i=1;i<=(v[2][t11*100+t22*10+t33]-v[1][t11*100+t22*10+t33])-3;i++)
   {
    t4=(t111*t222+t333)%10;
     st+=t4;
     t111=t222;
     t222=t333;
     t333=t4;
    }

c=n/(v[2][t11*100+t22*10+t33]-v[1][t11*100+t22*10+t33]);
r=n%(v[2][t11*100+t22*10+t33]-v[1][t11*100+t22*10+t33]);
s+=c*st;
r-=3;
s+=t11+t22+t33;
t111=t11;
t222=t22;
t333=t33;

for (i=1;i<=r;i++)
   {
    t4=(t111*t222+t333)%10;
     s+=t4;
     t111=t222;
     t222=t333;
     t333=t4;
     cont++;
    }

g<<s;
}
}
else
   {
   if (n==1) g<<t1;
   if (n==2) g<<t2+t1;
   if (n==3) g<<t3+t2+t1;
   else
   {
   s=t1+t2+t3;
   for (i=1;i<=n-3;i++)
      {
      t4=(t1*t2+t3)%10;
      s+=t4;
      t1=t2;
      t2=t3;
      t3=t4;
      }
   }
   g<<s;
   }
g.close();
f.close();
return 0;
}