Cod sursa(job #2014910)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 24 august 2017 17:04:26
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <bits/stdc++.h>
#define MOD 666013
#define ll long long
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
int i,j,k;
ll T[4][4];
ll R[4][4];
ll aux[4][4];
void inm(ll A[4][4], ll B[4][4], ll C[4][4])
{
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
        {
            C[i][j]=0;
            for(k=1;k<=3;k++)
                C[i][j]=(C[i][j]+(A[i][k]*B[k][j])%MOD)%MOD;
        }
}
void at(ll A[4][4], ll B[4][4])
{
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
        A[i][j]=B[i][j];
}
void put(ll A[4][4], ll n, ll C[4][4])
{
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
        C[i][j]=0;
    C[1][1]=C[2][2]=C[3][3]=1;
    while(n)
    {
        if(n%2)
            {
                inm(C,A,aux);
                at(C,aux);
            }
        n/=2;
        inm(A,A,aux);
        at(A,aux);
    }
}
int main()
{
    ll a,b,c,n,x,y,z,nrt;
    f>>nrt;
    for(;nrt;--nrt)
    {
        f>>x>>y>>z>>a>>b>>c>>n;
        if(n<3)
            switch(n)
            {
                case 0: {g<<x; break;}
                case 1: {g<<y; break;}
                case 2: {g<<z; break;}
            }
        else
        {
            T[2][1]=T[3][2]=1;
            T[1][1]=a;
            T[1][2]=b;
            T[1][3]=c;
            T[2][2]=T[2][3]=T[3][1]=T[3][3]=0;
            put(T,n-2,R);
            g<<((R[1][1]*z)%MOD+(R[1][2]*y)%MOD+(R[1][3]*x)%MOD)%MOD<<'\n';
        }
    }

    return 0;
}