Cod sursa(job #804889)

Utilizator krissu93FMI Tiugan Cristiana Elena krissu93 Data 30 octombrie 2012 16:50:31
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
#define mod 666013
using namespace std;
long long m[3][3]; long long s[3][3];
long long n;

void inmulteste(long long u[][3],long long t[][3],long long r[3][3])
{	int f,j,k;
	long long d[3][3];
	d[0][0]=0;d[0][1]=0;d[0][2]=0;d[1][0]=0;d[1][1]=0;d[1][2]=0;d[2][0]=0;d[2][1]=0;d[2][2]=0;
	for (f=0;f<3;f++)
		for(j=0;j<3;j++)
			for(k=0;k<3;k++)
			{
				d[f][j]=d[f][j]+(u[f][k]*t[k][j]);
				d[f][j]%=mod;
			}
	for (f=0;f<3;++f)
		for (j=0;j<3;++j)
			r[f][j]=d[f][j];
}

void imparte(long long a[3][3])
{int i,j;
	for (i=0;i<3;++i)
		for(j=0;j<3;++j)
			a[i][j]=a[i][j] % mod;
}

void putere(long long p)
{ 
	for(;p;p=p/2)
	{
		if (p %2==1)
			{ 
				inmulteste(s,m,s);   
				imparte(s);
		}
		inmulteste(m,m,m);
		imparte(m);
	}
}

int main()
{	int x,y,z,a,b,c,i,j,t,k;
	ifstream f("iepuri.in");
	ofstream g("iepuri.out");
	f>>t;
	for (i=1;i<=t;++i)
	{
		f>>a>>b>>c>>x>>y>>z>>n;
		m[0][0]=0;m[0][1]=1;m[0][2]=0;
		m[1][0]=0;m[1][1]=0;m[1][2]=1;
		m[2][0]=c%mod;m[2][1]=b%mod;m[2][2]=a%mod;
		for (j=0;j<=2;++j)
			for(k=0;k<=2;++k)
			{
				if (j==k) s[j][j]=1;
				else s[j][k]=0;
			}
		putere(n);
		k=((s[0][0]*x)%mod+(s[0][1]*y)%mod+(s[0][2]*z)%mod)%mod; 
		g<<k<<endl;
			
	}
}