Cod sursa(job #349410)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 19 septembrie 2009 13:17:06
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<stdio.h>
struct mat{long long uu,ud,ut,du,dd,dt,tu,td,tt;}ma;
long long tn;
long t,t0,t1,t2,a,b,c,n;
mat inm(mat a,mat b)
{mat c;
 c.uu=a.uu*b.uu+a.ud*b.du+a.ut*b.tu;
 c.uu%=666013;
 c.ud=a.uu*b.ud+a.ud*b.dd+a.ut*b.td;
 c.ud%=666013;
 c.ut=a.uu*b.ut+a.ud*b.dt+a.ut*b.tt;
 c.ut%=666013;
 c.du=a.du*b.uu+a.dd*b.du+a.dt*b.tu;
 c.du%=666013;
 c.dd=a.du*b.ud+a.dd*b.dd+a.dt*b.td;
 c.dd%=666013;
 c.dt=a.du*b.ut+a.dd*b.dt+a.dt*b.tt;
 c.dt%=666013;
 c.tu=a.tu*b.uu+a.td*b.du+a.tt*b.tu;
 c.tu%=666013;
 c.td=a.tu*b.ud+a.td*b.dd+a.tt*b.td;
 c.td%=666013;
 c.tt=a.tu*b.ut+a.td*b.dt+a.tt*b.tt;
 c.tt%=666013;
 return c;
}
mat rest(mat ma,long m)
{mat z;
 if(m==1)return ma;
   else
    if(m%2) return inm(rest(ma,m-1),ma);
      else
       {
        z=rest(ma,m/2);
        return inm(z,z);
       }
}
int main()
{
 freopen("iepuri.in","r",stdin);
 freopen("iepuri.out","w",stdout);
 scanf("%ld",&t);
 for(;t;--t)
    {scanf("%ld%ld%ld%ld%ld%ld%ld",&t0,&t1,&t2,&a,&b,&c,&n);
     ma.uu=0;
     ma.ud=1;
     ma.ut=0;
     ma.du=0;
     ma.dd=0;
     ma.dt=1;
     ma.tu=c;
     ma.td=b;
     ma.tt=a;
     ma=rest(ma,n);
     tn=ma.uu*t0+ma.ud*t1+ma.ut*t2;
     tn%=666013;
     printf("%lld\n",tn);}
 return 0;
}