Cod sursa(job #985182)

Utilizator misu007Pogonaru Mihai misu007 Data 16 august 2013 18:04:59
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.71 kb
#include <cstdio>
using namespace std;

int a0,b0,c0,k,ci[31];

void b2(int x)
{
    k=0;
    while(x!=0)
    {
        ci[k++]=x%2;
        x=x/2;
    }
}

void matputlg(long long &x,long long &y,long long &z,long long &x1,long long &y1,long long &z1,long long &x2,long long &y2,long long &z2)
{
    long long a,b,c,a1,b1,c1,a2,b2,c2,p,q,r,p1,q1,r1,p2,q2,r2;
    for(int i=k-1;i>=0;--i)
    {
        a=(x%666013*(x%666013)%666013+y%666013*(x1%666013)%666013+z%666013*(x2%666013)%666013)%666013;
        b=(x%666013*(y%666013)%666013+y%666013*(y1%666013)%666013+z%666013*(y2%666013)%666013)%666013;
        c=(x%666013*(z%666013)%666013+y%666013*(z1%666013)%666013+z%666013*(z2%666013)%666013)%666013;
        a1=(x1%666013*(x%666013)%666013+y1%666013*(x1%666013)%666013+z1%666013*(x2%666013)%666013)%666013;
        b1=(x1%666013*(y%666013)%666013+y1%666013*(y1%666013)%666013+z1%666013*(y2%666013)%666013)%666013;
        c1=(x1%666013*(z%666013)%666013+y1%666013*(z1%666013)%666013+z1%666013*(z2%666013)%666013)%666013;
        a2=(x2%666013*(x%666013)%666013+y2%666013*(x1%666013)%666013+z2%666013*(x2%666013)%666013)%666013;
        b2=(x2%666013*(y%666013)%666013+y2%666013*(y1%666013)%666013+z2%666013*(y2%666013)%666013)%666013;
        c2=(x2%666013*(z%666013)%666013+y2%666013*(z1%666013)%666013+z2%666013*(z2%666013)%666013)%666013;
        if(ci[i]==1)
        {
            p=a;
            q=b;
            r=c;
            p1=a1;
            q1=b1;
            r1=c1;
            p2=a2;
            q2=b2;
            r2=c2;
            a=(p%666013*(a0%666013)%666013+q%666013)%666013;
            b=(p%666013*(b0%666013)%666013+r%666013)%666013;
            c=(p%666013*(c0%666013))%666013;
            a1=(p1%666013*(a0%666013)%666013+q1%666013)%666013;
            b1=(p1%666013*(b0%666013)%666013+r1%666013)%666013;
            c1=(p1%666013*(c0%666013))%666013;
            a2=(p2%666013*(a0%666013)%666013+q2%666013)%666013;
            b2=(p2%666013*(b0%666013)%666013+r2%666013)%666013;
            c2=(p2%666013*(c0%666013))%666013;
        }
        x=a;
        y=b;
        z=c;
        x1=a1;
        y1=b1;
        z1=c1;
        x2=a2;
        y2=b2;
        z2=c2;
    }
}

int main()
{
    freopen("iepuri.in","r",stdin);
    freopen("iepuri.out","w",stdout);
    int t,n,x0,y0,z0;
    long long x,y,z,x1,y1,z1,x2,y2,z2;
    scanf("%d",&t);
    while(t>0)
    {
        scanf("%d%d%d%d%d%d%d",&x0,&y0,&z0,&a0,&b0,&c0,&n);
        x=1;y=0;z=0;x1=0;y1=1;z1=0;x2=0;y2=0;z2=1;
        b2(n-2);
        matputlg(x,y,z,x1,y1,z1,x2,y2,z2);
        n=((x*z0)%666013+(y*y0)%666013+(z*x0)%666013)%666013;
        printf("%d\n",n);
        --t;
    }
    return 0;
}