Cod sursa(job #849200)

Utilizator mihai10stoicaFMI - Stoica Mihai mihai10stoica Data 6 ianuarie 2013 18:23:54
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<cstdio>
#include<cstring>
#include<cstdlib>
FILE *f=fopen("iepuri.in","r"),*g=fopen("iepuri.out","w");
int n,a,b,c,x,y,z,i;
long long m[3][3],sol[3][3],aux[3][3];
void mult(long long e[3][3],long long f[3][3],long long g[3][3])
{
    int j,k;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            for(k=0;k<3;k++)
                g[i][j]=(g[i][j]+e[i][k]*f[k][j])%666013;
}
void power()
{
    memset(m,0,sizeof(c));
    memset(sol,0,sizeof(sol));
    m[0][1]=m[1][2]=1;
    m[2][0]=c;m[2][1]=b;m[2][2]=a;
    sol[0][0]=sol[1][1]=sol[2][2]=1;
    for(i=0;(1<<i)<=n;i++)
    {
        if(n&(1<<i))
        {
            memset(aux,0,sizeof(aux));
            mult(m,sol,aux);
            memcpy(sol,aux,sizeof(aux));
        }
    memset(aux,0,sizeof(aux));
    mult(m,m,aux);
    memcpy(m,aux,sizeof(m));
    }
    fprintf(g,"%d\n",(x*sol[0][0]+y*sol[0][1]+z*sol[0][2])%666013);
}
int main()
{   
    int t;
    fscanf(f,"%d",&t);
    while(t--)
    {
        fscanf(f,"%d %d %d %d %d %d %d", &x, &y, &z, &a, &b, &c, &n);
        power();
    }
    fclose(f);fclose(g);
    return 0;
}