Cod sursa(job #1387749)

Utilizator vlad00Vlad Stoleru vlad00 Data 14 martie 2015 17:23:58
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <fstream>
#include <cstring>
const int mod=666013;
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
int x,y,z,a,b,c,n,ti,j,k;
int p[4][4];
void fct(int a[][4],int e)
{
    int aux[4][4];
    while(e)
    {
        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;
        if(e&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;
        }
        e>>=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++)
                a[i][j]=aux[i][j]%mod;

    }
}
int main()
{
    f>>t;
    for(i=1; i<=t; i++)
    {
        f>>x>>y>>a>>b>>c>>n>>t;
        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)
                g<<x;
            else if(n==1)
                g<<y;
            else if(n==2)
                g<<z;
            g<<'\n';
        }
        else
        {
            fct(m,n-2);
            g<<(1LL*x*p[1][3]+1LL*y*p[2][3]+1LL*z*p[3][3])%mod<<'\n';
        }
    }
    return 0;
    f.close();
    g.close();
}