Cod sursa(job #1737046)

Utilizator theo.stoicanTheodor Stoican theo.stoican Data 3 august 2016 10:14:37
Problema Iepuri Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstring>
 
using namespace std;
 
long long mat[3][3];
long long sol[3][3];
 
void mult (long long a[][3], long long b[][3], long long c[][3])
{
    for (int i = 0; i <= 2; i++)
    {
        for (int j = 0; j <= 2; j++)
        {
            for (int k = 0; k <= 2; k++)
            {
                c[i][j] = (c[i][j] + a[i][k] * b[k][j] * 1LL) % 666013;
            }
        }
    }
}
 
void lg_power (int p)
{
    long long aux[3][3];
    memset(sol, 0, sizeof(sol));
    sol[0][0] = 1;
    sol[1][1] = 1;
    sol[2][2] = 1;//matr unitate
    for (int i = 0; (1<<i) <= p; i++)
    {
        if ((1<<i) & p)
        {
            memset(aux, 0, sizeof(aux));
            mult (mat, sol, aux);
            memcpy (sol, aux, sizeof(aux));
        }
 
        memset (aux, 0, sizeof(aux));
        mult (mat, mat, aux);
        memcpy (mat, aux, sizeof(aux));
 
    }
}
 
int main()
{
 
    ifstream fin ("iepuri.in");
    ofstream fout ("iepuri.out");
    int x,y,z,a,b,c,n;
    int t;
    //cin>>t;
    fin>>t;
    for (int i = 1; i <= t;i++)
    {
        fin>>x>>y>>z>>a>>b>>c>>n;
        //scanf("%d%d%d%d%d%d%d", &x, &y, &z, &a, &b, &c, &n);
        mat[0][0] = a;
        mat[1][0] = b;
        mat[2][0] = c;
        mat[0][1] = 1;
        mat[1][1] = 0;
        mat[2][1] = 0;
        mat[0][2] = 0;
        mat[1][2] = 1;
        mat[2][2] = 0;
//cout<<"n: "<<n<<endl;
        lg_power(n-2);
 
        long long aux = (((long long)sol[0][0] * (long long)z)%666013 + ((long long)sol[1][0] * (long long)y)%666013
        + ((long long) sol[2][0] * (long long)x)%666013);
        aux = aux % 666013;
        fout<<aux<<"\n";
        //printf("%llu\n", aux);
    }
}