Pagini recente » Cod sursa (job #223014) | Cod sursa (job #3134953) | Cod sursa (job #2078121) | Rating Vicovan Teodor (devilfish) | Cod sursa (job #993564)
Cod sursa(job #993564)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#define MOD 666013
using namespace std;
long long x,y,z,a,b,c,n;
long long rez[5][5],init[5][5],tmp[5][5];
void pow(long long putere)
{
if(putere == 0 || putere == 1)
return;
if(putere%2==0)
{
/// rez * rez
for(int i=1;i<=3;++i)
for(int j=1;j<=3;++j)
{
tmp[i][j]=0;
for(int p=1;p<=3;++p)
tmp[i][j]+=rez[i][p]*rez[p][j];
tmp[i][j]%=MOD;
}
for(int i=1;i<=3;++i)
for(int j=1;j<=3;++j)
rez[i][j]=tmp[i][j];
pow(putere/2);
return;
}
pow(putere-1);
/// rez * init
for(int i=1;i<=3;++i)
for(int j=1;j<=3;++j)
{
tmp[i][j]=0;
for(int p=1;p<=3;++p)
tmp[i][j]+=rez[i][p]*init[p][j];
tmp[i][j]%=MOD;
}
for(int i=1;i<=3;++i)
for(int j=1;j<=3;++j)
rez[i][j]=tmp[i][j];
}
int main()
{
int t;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
f>>t;
for(;t;--t)
{
f>>x>>y>>z>>a>>b>>c>>n;
if( n == 0 )
g<<x<<"\n";
if( n == 1 )
g<<y<<"\n";
if(n == 2 )
g<<z<<"\n";
if(n<=2)
continue;
memset(rez,0,sizeof(rez));
memset(init,0,sizeof(init));
rez[1][3]=c; init[1][3]=c;
rez[2][1]=1; init[2][1]=1;
rez[2][3]=b; init[2][3]=b;
rez[3][2]=1; init[3][2]=1;
rez[3][3]=a; init[3][3]=a;
pow(n-2);
long long r=(x*rez[1][3] + y*rez[2][3] + z*rez[3][3]);
g<<r%MOD<<endl;
}
return 0;
}