Cod sursa(job #837159)

Utilizator mariamFiciu Maria mariam Data 17 decembrie 2012 16:29:51
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<fstream>

#include<string>

#define MOD 666013

using namespace std;
 
ifstream f("iepuri.in");
ofstream g("iepuri.out");
 
long long p[3][3];
long long s,v,x[3],a,b,c,n;
long long A[3][3],temb[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;
                //if(c[i][j]>=MOD)
                    //c[i][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,temb);
                memcpy(sol,temb,sizeof(sol));
            }
            multiply(A,A,temb);
            memcpy(A,temb,sizeof(A));
            n/=2;
        }
        s=0;
        for(i=0;i<3;i++){
            s+=(sol[0][i]*x[i])%MOD;
            s%=MOD;
        }
        g<<s<<'\n';
		v--;
    }
     
     
    return 0;
}