Cod sursa(job #1470460)

Utilizator danstefanDamian Dan Stefan danstefan Data 11 august 2015 12:45:02
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <cstdio>
using namespace std;
int X,Y,Z,t,A,B,C,n,i,a[4][4],m[4][4];
 void inm(int a[4][4],int b[4][4])
{
    int i,j,k,c[4][4];
    for(i=0;i<3;++i)
    for(j=0;j<3;++j)
    for(c[i][j]=k=0;k<3;++k)
    c[i][j]=(1LL*c[i][j]+1LL*a[i][k]*b[k][j])%666013;

    for(i=0;i<3;++i)
    for(j=0;j<3;++j)
    a[i][j]=c[i][j];
}
void initializare(){
    a[0][0]=0;
    a[0][1]=0;
    a[1][0]=1;
    a[1][1]=0;
    a[2][0]=0;
    a[2][1]=1;
    a[0][2]=A;
    a[1][2]=B;
    a[2][2]=C;
    m[0][0]=m[1][1]=m[2][2]=1;
    m[0][1]=m[0][2]=m[1][0]=m[1][2]=m[2][0]=m[2][1]=0;}
void putere(int x){
    if(!x) return;
    if(x%2==1) inm(m,a);
    inm(a,a);
    putere(x>>1);}
int main(){
    freopen("iepuri.in","r",stdin);
    ofstream g ("iepuri.out");
    scanf("%d",&t);
    for(i=1;i<=t;++i){
        scanf("%d%d%d%d%d%d%d",&X,&Y,&Z,&C,&B,&A,&n);
        initializare();
         putere(n);
        g<<(1LL*m[0][0]*X+1LL*m[1][0]*Y+1LL*m[2][0]*Z)%666013<<'\n';}
        return 0;}