Cod sursa(job #844714)

Utilizator cdc_rapidCurtusan Ciprian cdc_rapid Data 29 decembrie 2012 18:50:31
Problema Iepuri Scor 100
Compilator cpp Status done
Runda 23dezile_2 Marime 1.38 kb
#include <fstream>
#include <cstring>
#include <algorithm>
 
using namespace std;
 
#define MOD 666013
 
long long M[5][5],SOL[5][5],O[5][5];
ifstream f("iepuri.in");
ofstream g("iepuri.out");
void copy(long long B[5][5],long long C[5][5])
{
     for(int i=1; i<=3; i++)
        for(int j=1; j<=3; j++)
        B[i][j]=C[i][j];
}
 
void mul(long long B[5][5] , long long C[5][5])
{
     long long aux2[5][5];
     copy(aux2,O);
     for(int l=1; l<=3;l++)
         for(int c=1; c<=3; c++)
            for(int i=1; i<=3; i++)
            {
                    aux2[l][c]+=B[l][i]*C[i][c];
                    if(aux2[l][c] > MOD) aux2[l][c]%=MOD;
            }
      copy(B,aux2);
      
}
 
void Lg_Pow(long long P)
{
     if(P==1)
     {
             copy(SOL,M);
             return;
     }
     Lg_Pow(P/2);
     if(P%2)
     {
             mul(SOL,SOL);
             mul(SOL,M);
     }
     else mul(SOL,SOL);
}
 
int main()
{
    int T;
    f>>T;
    while(T--)
    {
              int X,Y,Z,A,B,C;
              long long N;
              f>>X>>Y>>Z>>A>>B>>C>>N;
              M[1][1]=M[1][2]=M[2][2]=M[3][1]=0;
              M[2][1]=M[3][2]=1;
              M[1][3]=C,M[2][3]=B,M[3][3]=A;
              Lg_Pow(N-2);
              int rez=(((((X*SOL[1][3])%MOD)+Y*SOL[2][3])%MOD)+Z*SOL[3][3])%MOD;
              g<<rez<<"\n";
    }
return 0;
}