Cod sursa(job #1052166)

Utilizator lupuflaviu9lupuflaviu lupuflaviu9 Data 10 decembrie 2013 21:52:44
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <cstring>
#define ll long long
#define mod 666013
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
ll a,b,c,x,y,z;
int n,t;
void initialize (ll m[][3])
{
m[0][0] = a;
m[1][0] = b;
m[2][0] = c;
m[0][1] = 1;
m[1][2] = 1;
}
void matrix_power (ll m[][3], int p)
{
if (p==1)
{
initialize (m);
return;
}
ll send[3][3],temp[3][3];
memset (send,0,sizeof(send));
memset (temp,0,sizeof(temp));
matrix_power (send,p/2);
for (int i=0; i<3; ++i)
for (int j=0; j<3; ++j)
for (int k=0; k<3; ++k)
{
temp[i][j] += (send[i][k]*send[k][j])%mod;
if (temp[i][j] >= mod) temp[i][j] -= mod;
}
if (p%2)
{
ll u[3][3];
memset (u,0,sizeof(u));
initialize(u);
for (int i=0; i<3; ++i)
for (int j=0; j<3; ++j)
for (int k=0; k<3; ++k)
{
m[i][j] += (temp[i][k]*u[k][j])%mod;
if (m[i][j] >= mod) m[i][j] -= mod;
}
}
else
    {
memcpy (m,temp,sizeof(temp));
    }
}
int main()
{
fin>>t;
for (;t; --t)
{
fin>>x>>y>>z>>a>>b>>c>>n;
ll m[3][3];
memset (m,0,sizeof(m));
matrix_power (m,n-2);
fout<<((z*m[0][0])%mod + (y*m[1][0])%mod + (x*m[2][0])%mod)%mod<<"\n";
    }
}