Cod sursa(job #745228)

Utilizator gramatovici_paulGramatovici Paul gramatovici_paul Data 10 mai 2012 19:44:14
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("iepuri.in");
ofstream out("iepuri.out");

inline void inmulteste(long long mat1[4][4], long long mat2[4][4])
{
	long long i,j,k,mat3[4][4];
	for(i=1;i<=3;++i)
		for(j=1;j<=3;++j)
        {
			mat3[i][j]=0;
			for(k=1;k<=3;++k)
				mat3[i][j]=(mat3[i][j]+mat1[i][k]*mat2[k][j])%666013;
		}
	for(i=1;i<=3;++i)
		for(j=1;j<=3;++j)
			mat1[i][j]=mat3[i][j];
    return;
}


long long rez[4][4],m[4][4];


void putere(int p)
{
    if(p==1)
    {
        return;
    }
    if(p%2==1)
    {
        putere(p/2);
        inmulteste(rez,rez);
        inmulteste(rez,m);
        return;
    }
    putere(p/2);
    inmulteste(rez,rez);
}


int main()
{
    int t,k,x,y,z,a,b,c,n;
    in>>t;
    for(k=1;k<=t;++k)
    {
        in>>x>>y>>z>>a>>b>>c>>n;
        m[3][1]=c;
        m[3][2]=b;
        m[3][3]=a;
        m[1][2]=1;
        m[2][3]=1;
        rez[1][1]=rez[1][3]=rez[2][1]=rez[2][2]=0;
        rez[3][1]=c;
        rez[3][2]=b;
        rez[3][3]=a;
        rez[1][2]=1;
        rez[2][3]=1;
        putere(n);
        out<<(rez[1][1]*x+rez[1][2]*y+rez[1][3]*z)%666013<<"\n";
    }
    return 0;
}