Cod sursa(job #1905432)

Utilizator duesakBourceanu Cristian duesak Data 6 martie 2017 04:23:46
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<fstream>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
long long mi[4][4];
long long MOD=666013;
int iepuri(long long x, long long y, long long z,int p){
    long long cmi[4][4],rmi[4][4],mmi[4][4];
    int i,j,k;
    for(i=1;i<=3;i++)
    for(j=1;j<=3;j++){
        if(i==j)cmi[i][j]=1;
        else cmi[i][j]=0;
        mmi[i][j]=mi[i][j];
        rmi[i][j]=0;
    }
    while(p){
        if(p&1){
            for(i=1;i<=3;i++)
            for(j=1;j<=3;j++)
                for(k=1;k<=3;k++)
            rmi[i][j]=(rmi[i][j]+cmi[i][k]*mmi[k][j])%MOD;

            for(i=1;i<=3;i++)
            for(j=1;j<=3;j++){cmi[i][j]=rmi[i][j];rmi[i][j]=0;}
        }
        for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            for(k=1;k<=3;k++)
        rmi[i][j]=(rmi[i][j]+mmi[i][k]*mmi[k][j])%MOD;
        for(i=1;i<=3;i++)
        for(j=1;j<=3;j++){mmi[i][j]=rmi[i][j];rmi[i][j]=0;}
        p>>=1;
    }
    return (x*cmi[1][3]+y*cmi[2][3]+z*cmi[3][3])%MOD;
}
int main(){
    int x,y,z,a,b,c,n,t;
    fin>>t;
    mi[2][1]=1;mi[3][2]=1;
    for(int i=1;i<=t;i++){
        fin>>x>>y>>z>>a>>b>>c>>n;
        mi[1][3]=c;mi[2][3]=b;mi[3][3]=a;
        fout<<iepuri(x,y,z,n-2)<<'\n';
    }
    return 0;
}