Cod sursa(job #804090)

Utilizator IoannaPandele Ioana Ioanna Data 28 octombrie 2012 20:39:13
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
#define mod 666013
using namespace std;

ifstream in("iepuri.in");
ofstream out("iepuri.out");

long a,b,c;
void scan(long &n)
{
    in>>n;
}

void init(long t[][4])
{
    t[1][1]=0;
    t[1][2]=1;
    t[1][3]=0;
    t[2][1]=0;
    t[2][2]=0;
    t[2][3]=1;
    t[3][1]=c;
    t[3][2]=b;
    t[3][3]=a;
}

void setzero(long t[][4])
{
    for (int i=1;i<=3;i++)
        for (int j=1;j<=3;j++)
            t[i][j]=0;
}

void mult(long a[][4],long b[][4],long c[][4])
{
    setzero(a);
    for (int k=1;k<=3;k++)
        for (int i=1;i<=3;i++)
            for (int j=1;j<=3;j++)
            {
                a[i][j]=((long long)a[i][j]+((long long)b[i][k]*c[k][j])%mod)%mod;
            }
}

void putere(long t[][4],long n)
{
    long m[4][4];
    long u[4][4];
    if (n==1)
    {
        init(t);
        return;
    }
    if (n%2==0)
    {
        putere(m,n/2);
        mult(t,m,m);
    }
    else
    {
        putere(m,n-1);
        init(u);
        mult(t,m,u);
    }
}

int main()
{
    long t[4][4],n,x,y,z,set;
    in>>set;
    for (int i=1;i<=set;i++)
    {
        in>>x>>y>>z>>a>>b>>c>>n;
        putere(t,n-2);
        out<<(((long long)t[3][1]*x)%mod+((long long)t[3][2]*y)%mod+((long long)t[3][3]*z)%mod)%mod<<"\n";
    }
    return 0;
}