Cod sursa(job #1411323)

Utilizator danyro364Savu Ioan Daniel danyro364 Data 31 martie 2015 17:05:18
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
//#include <iostream>
#include <cstdio>
#define mod 666013
using namespace std;
FILE *f=fopen("iepuri.in","r"),*g=fopen("iepuri.out","w");
long long A,B,C,n,t1,t2,t3,z[4][4],m[4][4],sum;
void inm(long long a[4][4],long long b[4][4])
{
    int c[4][4],i,j,h;
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
        {
            c[i][j]=0;
            for(h=1;h<=3;h++)
                c[i][j]=(c[i][j]+a[i][h]*b[h][j])%mod;
        }
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
        a[i][j]=c[i][j];
}
int main()
{
    int i,t,j,h;
    fscanf(f,"%d",&t);
    for(i=1;i<=t;i++)
    {
        fscanf(f,"%lld %lld %lld %lld %lld %lld %lld",&t1,&t2,&t3,&A,&B,&C,&n);
        for(j=1;j<=3;j++)
            for(h=1;h<=3;h++)
            {
                if(h!=j)
                    m[j][h]=0;
                else
                    m[j][h]=1;
                z[j][h]=0;
            }
        z[3][1]=C; z[3][2]=B; z[3][3]=A;
        z[1][2]=z[2][3]=1;
        n=n-2;
        while(n>0)
        {
            if(n%2==1)
                inm(m,z);
            inm(z,z);
            n=n/2;
        }
        sum=(m[3][1]*t1+m[3][2]*t2+m[3][3]*t3)%mod;
        fprintf(g,"%lld\n",sum);
    }
    fclose(f);
    fclose(g);
    return 0;
}