Mai intai trebuie sa te autentifici.
Cod sursa(job #1242553)
Utilizator | Data | 14 octombrie 2014 17:46:46 | |
---|---|---|---|
Problema | Iepuri | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.51 kb |
#include<cstdio>
#define mod 666013
using namespace std;
long long m[4][4],mat[4][4],p[4][4],x,y,z,n,a,b,c,sol;
int l,r,k,b2[100001],T;
void transf(int nr)
{
while (nr!=0)
{
b2[++k]=nr%2;
nr=nr/2;
}
}
int main()
{
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
scanf("%d",&T);
if (T!=0)
do
{
scanf("%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
mat[1][1]=1; mat[1][2]=0; mat[1][3]=0; mat[2][1]=0; mat[2][2]=1; mat[2][3]=0;
mat[3][1]=0; mat[3][2]=0; mat[3][3]=1;
m[1][1]=0; m[1][2]=1; m[1][3]=0; m[2][1]=0; m[2][2]=0; m[2][3]=1;
m[3][1]=c; m[3][2]=b; m[3][3]=a;
k=0;
transf(n);
for (int i=k;i>=1;--i)
{
for(l=1;l<=3;++l)
for (r=1;r<=3;++r)
p[l][r]=((mat[l][1]*mat[1][r])%mod+(mat[l][2]*mat[2][r])%mod+(mat[l][3]*mat[3][r])%mod)%mod;
if (b2[i]%2==1)
{
//p=p^2*A;
for(l=1;l<=3;++l)
for (r=1;r<=3;++r)
mat[l][r]=p[l][r];
for(l=1;l<=3;++l)
for (r=1;r<=3;++r)
p[l][r]=((mat[l][1]*m[1][r])%mod+(mat[l][2]*m[2][r])%mod+(mat[l][3]*m[3][r])%mod)%mod;
}
for(l=1;l<=3;++l)
for (r=1;r<=3;++r)
mat[l][r]=p[l][r];
}
sol=((mat[1][1]*x)%mod+(mat[1][2]*y)%mod+(mat[1][3]*z)%mod)%mod;
printf("%lld\n",sol);
--T;
}while (T>0);
return 0;
}