Cod sursa(job #324239)

Utilizator pcinfoCarmen Popescu pcinfo Data 15 iunie 2009 11:06:13
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<fstream> 
#include <vector>

using namespace std;

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

void inmult(long long a[4][4], long long b[4][4])  
{
	long long i,j,k;   
    long long c[4][4];   
    c[1][1]=c[1][2]=c[1][3]=0;   
	c[2][1]=c[2][2]=c[2][3]=0;
	c[3][1]=c[3][2]=c[3][3]=0;
    for (i=1;i<=3;++i)   
        for (j=1;j<=3;++j)   
            for (k=1;k<=3;++k)   
                c[i][j]=(c[i][j]+a[i][k]*b[k][j])%666013;
	for (i=1;i<=3;i++)
		for (j=1;j<=3;j++)
			a[i][j]=c[i][j];
}

int main()
{
	long long n;
	long long a[4][4],b[4][4];
	long long x,y,z;
	long long t;
	
	
	f>>t;
	
	while (t>0)
	{
		t--;
		f>>x>>y>>z>>a[3][3]>>a[3][2]>>a[3][1]>>n;
		a[1][2]=1;
		a[2][3]=1;
		a[1][1]=a[1][3]=a[2][1]=a[2][2]=0;
		b[1][1]=b[2][2]=b[3][3]=1;
		b[1][2]=b[1][3]=b[2][1]=b[2][3]=b[3][1]=b[3][2]=0;
		
		while (n>0)
		{
			if (n%2==1)
				inmult(b,a);
			inmult(a,a);
			n=n/2;
		}
		x=b[1][1]*x%666013 + b[1][2]*y%666013 + b[1][3]*z%666013;
		g<<x<<"\n";
	}
	
}