Cod sursa(job #1126762)

Utilizator emiemiEmi Necula emiemi Data 27 februarie 2014 09:38:26
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream>
#define MOD 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
int x,y,z,a,b,c,n,t,nrt,m[5][5];
void inmultire(int a[5][5],int b[5][5])
{
    int i,j,k,c[5][5];
    for(i=1;i<=3;++i)
    for(j=1;j<=3;++j)
    {
        c[i][j]=0;
        for(k=1;k<=3;++k)
        c[i][j]+=a[i][k]*b[k][j];
    }
    for(i=1;i<=3;++i)
    for(j=1;j<=3;++j)
    a[i][j]=c[i][j]%MOD;
}
void expo(int p)
{
    int i,j,x[5][5],y[5][5];
    for(i=1;i<=3;++i)
    for(j=1;j<=3;++j)
    x[i][j]=0, y[i][j]=m[i][j];
    x[1][1]=1; x[2][2]=1; x[3][3]=1;
    while(p)
    {
        if(p&1)
        inmultire(x,y);
        inmultire(y,y);
        p/=2;
    }
    for(i=1;i<=3;++i)
    for(j=1;j<=3;++j)
    m[i][j]=x[i][j];
}
int main()
{
    f>>t;
    for(nrt=1;nrt<=t;++nrt)
    {
        f>>x>>y>>z>>a>>b>>c>>n;
        m[1][1]=a; m[1][2]=b; m[1][3]=c;
        m[2][1]=1; m[2][2]=0; m[2][3]=0;
        m[3][1]=0; m[3][2]=1; m[3][3]=0;
        expo(n-2);
        g<<((m[1][1]*z)%MOD+(m[1][2]*y)%MOD+(m[1][3]*x)%MOD)%MOD<<'\n';
    }
    return 0;
}