Cod sursa(job #1387821)

Utilizator vlad00Vlad Stoleru vlad00 Data 14 martie 2015 18:35:10
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
const int mod=666013;
int p[4][4];
void fct(int a[][4],int e)
{
    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(e)
        {
            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*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 x,y,z,a,b,c,n,t,i;
    f>>t;
    for(i=1; i<=t; i++)
    {
        f>>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)
                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();
}