Cod sursa(job #2456270)

Utilizator driver71528@gmail.comTerec Andrei-Sorin [email protected] Data 14 septembrie 2019 09:20:39
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>
#define REP(i,n) for(int i=0;i<n;i++)
#define MOD 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
typedef long long ll;
struct matrice
{
    ll a[3][3];
    ll* operator[](int i)
    {
        return a[i];
    }
    matrice operator*(matrice &b)
    {
        matrice rez;
        REP(i,3) REP(j,3)
        rez[i][j]=0;

        REP(i,3) REP(j,3) REP(k,3)
            rez[i][j]=(rez[i][j]+a[i][k]*b[k][j])%MOD;
        return rez;
    }
};
matrice operator^(matrice a,ll n)
{
    matrice rez;
    REP(i,3) REP(j,3) rez[i][j]=(i==j);
    while(n)
        if(n%2)
        {
            n--;
            rez=rez*a;
        }
        else
        {
            n/=2;
            a=a*a;
        }
    return rez;
}

int main()
{
    ll a,b,c,n,t;
    f>>t;
    matrice T;
    T[0][0]=T[0][2]=T[1][0]=T[1][1]=0;
    T[0][1]=T[1][2]=1;
    ll F[3];
    REP(i,t)
    {
        f>>F[0]>>F[1]>>F[2]>>a>>b>>c>>n;
        T[2][0]=c;
        T[2][1]=b;
        T[2][2]=a;
        matrice S=T^n;
        ll rez=0;
        REP(i,3)
            rez=(rez+S[0][i]*F[i])%MOD;
        g<<rez<<'\n';
    }
    f.close();
    g.close();
    return 0;
}