Cod sursa(job #1405509)

Utilizator robx12lnLinca Robert robx12ln Data 29 martie 2015 12:24:36
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
long long d[4][4],v[4][4],m=666013,t,x,z,y,a,b,c,n,suma;
void produs(long long a[4][4],long long b[4][4]){
    for(int i=1;i<=3;i++){
        for(int j=1;j<=3;j++){
            v[i][j]=0;
            for(int k=1;k<=3;k++){
                v[i][j]+=a[i][k]%m*b[k][j]%m;
                v[i][j]%=m;
            }
        }
    }
}
void putere(long long b){
    long long r[4][4]={
        {0,0,0,0},
        {0,1,0,0},
        {0,0,1,0},
        {0,0,0,1},
    };
    while(b!=0){
        if(b%2==1){
            produs(r,d);
            memcpy(r,v,sizeof(v));
        }
        memset(v,0,sizeof(v));
        produs(d,d);
        memcpy(d,v,sizeof(v));
        b/=2;
    }
    memcpy(d,r,sizeof(r));
}
int main(){
    for(fin>>t;t;t--){
        fin>>x>>y>>z>>a>>b>>c>>n;
        memset(d,0,sizeof(d));
        d[1][1]=a;
        d[1][2]=b;
        d[1][3]=c;
        d[2][1]=d[3][2]=1;
        putere(n-2);
        memset(v,0,sizeof(v));
        suma=0;
        suma=suma%m + d[1][1]*z%m + d[1][2]*y%m + d[1][3]*x%m;
        suma%=m;
        fout<<suma%m<<"\n";
    }
    return 0;
}