Cod sursa(job #750946)

Utilizator Agent008Cristi Poputea Agent008 Data 23 mai 2012 18:17:33
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include<iostream>
#include<fstream>
using namespace std;
fstream f("iepuri.in",ios::in), g("iepuri.out",ios::out);
long long mat[5][5],mat1[5][5],pu,mod=666013;
int x,y,z,a,b,c,t;
void matmat(long long x[5][5],long long y[5][5]);
void matpro(long long x[5][5],long long nr);
void putere(long long a[5][5],long long p,long long m);
void init(long long x[5][5],int nr1,int nr2,int nr3);
int main()
{
	f>>t;
	for(int i=1;i<=t;i++)
	{	
		f>>x>>y>>z>>a>>b>>c>>pu;
		init(mat,a,b,c);
		init(mat1,a,b,c);
		putere(mat,pu,mod);
		//cout<<mat[1][1]*x+mat[1][2]*y+mat[1][3]*z<<"\n";
		g<<mat[1][1]*x+mat[1][2]*y+mat[1][3]*z<<"\n";
	}
	return 0;
}
void matmat(long long x[5][5],long long y[5][5])
{
	long long z[5][5];
	for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++)
			z[i][j]=0;
	for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++)
			for(int k=1;k<=3;k++)
				z[i][j]+=(x[i][k]*y[k][j]);
	for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++)
			x[i][j]=z[i][j];
}
void matpro(long long x[5][5],long long nr)
{
	for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++)
			x[i][j]%=nr;
}
void putere(long long a[5][5],long long p,long long m)
{
	if(p>1)
	{
		putere(a,p/2,m);
		matmat(a,a);
		matpro(a,m);
		if(p%2)
			matmat(a,mat1);
		matpro(a,m);
	}	
}
void init(long long x[5][5],int nr1,int nr2,int nr3)
{
	for(int i=1;i<=2;i++)
		for(int j=1;j<=3;j++)
			if((i==1 && j==2) || (i==2 && j==3))
				x[i][j]=1;
			else
				x[i][j]=0;
	x[3][1]=nr3;
	x[3][2]=nr2;
	x[3][3]=nr1;
}