Cod sursa(job #1387737)

Utilizator calinalexandruAlexandru Calin calinalexandru Data 14 martie 2015 17:18:49
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
const int mod=666013;
int p[4][4];
void functie(int a[][4],int exp)
{
    int aux[4][4],i,j,k;
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            p[i][j]=0;
    for(i=1;i<=3;i++)
        p[i][i]=1;
    while(exp)
    {
        if(exp&1)
        {
            for(i=1;i<=3;i++)
                for(j=1;j<=3;j++)
                    aux[i][j]=0;
            for(i=1;i<=3;i++)
                for(j=1;j<=3;j++)
                    for(k=1;k<=3;k++)
                        aux[i][j]+=(1LL*p[i][k]*a[k][j])%mod;
        for(i=1;i<=3;i++)
            for(j=1;j<=3;j++)
                p[i][j]=aux[i][j]%mod;
        }
        exp>>=1;
         for(i=1;i<=3;i++)
                for(j=1;j<=3;j++)
                    aux[i][j]=0;
            for(i=1;i<=3;i++)
                for(j=1;j<=3;j++)
                    for(k=1;k<=3;k++)
                        aux[i][j]+=(1LL*a[i][k]*a[k][j])%mod;
        for(i=1;i<=3;i++)
            for(j=1;j<=3;j++)
                a[i][j]=aux[i][j]%mod;
    }
}
int main()
{
    int t,x,y,z,a,b,c,n,i;
    in>>t;
    for(i=1;i<=t;i++)
    {
        in>>x>>y>>z>>a>>b>>c>>n;
        int m[4][4];
        memset(m,0,sizeof(m));
        m[2][1]=1;
        m[3][2]=1;
        m[1][3]=c;
        m[2][3]=b;
        m[3][3]=a;
        if(n-2<=0)
        {
            if(n==0) out<<x;
            else if(n==1) out<<y;
            else if(n==2) out<<z;
            out<<'\n';
        }
        else
        {
            functie(m,n-2);
            out<<(1LL*x*p[1][3]+1LL*y*p[2][3]+1LL*z*p[3][3])%mod<<'\n';
        }
    }
    in.close();
    out.close();
    return 0;
}