Cod sursa(job #837173)

Utilizator mariamFiciu Maria mariam Data 17 decembrie 2012 16:48:14
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<fstream>
#include<string.h>
#define MOD 666013
 
 
using namespace std;
 
ifstream f("iepuri.in");
ofstream g("iepuri.out");
 
long long p[3][3],v;
long long sum ,X[3],a,b,c,n;
long long A[3][3],r[3][3],sol[3][3];
int i;
 
void multiply(long long a[3][3],long long b[3][3],long long c[3][3]){
    int i,j,k;
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            c[i][j]=0;
            for(k=0;k<3;k++){
                c[i][j]+=a[i][k]*b[k][j]%MOD;
				c[i][j]%=MOD;
            }
        }
    }
}
 
 
int main(){
     
    f>>   v;
    p[0][0]=p[1][1]=p[2][2]=1;
    while(v){
        f>>X[2]>>X[1]>>X[0]>>a>>b>>c>>n;
         
        A[1][1]=A[1][2]=A[2][0]=A[2][2]=0;
        A[1][0]=A[2][1]=1;
        A[0][0]=a;A[0][1]=b;A[0][2]=c;
         
        n-=2;
         
        memcpy(sol,p,sizeof(sol));
         
        while(n!=0){
            if(n%2){
                multiply(sol,A,r);
                memcpy(sol,r,sizeof(sol));
            }
            multiply(A,A,r);
            memcpy(A,r,sizeof(A));
            n/=2;
        }
        sum=0;
        for(i=0;i<3;i++){
            sum+=(sol[0][i]*X[i])%MOD;
            sum%=MOD;
        }
        g<<sum<<'\n';
		v--;
    }
     
     
    return 0;
}