Cod sursa(job #2830884)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 10 ianuarie 2022 12:53:23
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <fstream>
#include <iostream>
#include <algorithm>

#define MOD 666013

using namespace std;

ifstream fin("iepuri.in");
ofstream fout("iepuri.out");

const int NMAX=3;
int v[NMAX][NMAX];
int copie[NMAX][NMAX];
int puteri[NMAX][NMAX];
int sum[NMAX][NMAX];

void solve(int copie[NMAX][NMAX],int v[NMAX][NMAX],int sum[NMAX][NMAX])
{
    int i,j,k,n;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
    {
        sum[i][j]=0;
        for(k=0;k<3;k++)
            sum[i][j]=((sum[i][j]%MOD)+1LL*copie[i][k]*v[k][j])%MOD;
    }
}

void schimb(int copie[NMAX][NMAX],int v[NMAX][NMAX])
{
    int i,j;
    for(i=0;i<3;i++)
        for (j=0;j<3;j++)
            copie[i][j]=v[i][j];
}

void power(int n)
{
    int i,j;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            puteri[i][j]=0;
    puteri[0][0]=1;
    puteri[1][1]=1;
    puteri[2][2]=1;
    while(n)
    {
        if (n%2==1)
        {
            solve(puteri,copie,v);
            schimb(puteri,v);
        }
        n=n/2;
        solve(copie,copie,v);
        schimb(copie,v);
    }
}

void cleart(int copie[NMAX][NMAX])
{
    int i,j;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            copie[i][j]=0;
    copie[1][0]=1;
    copie[2][1]=1;
}

int main()
{
    int t,s,x,y,z,a,b,c,i,j,n;
    long long s1,s2,s3;
    fin>>t;
    for(i=1;i<=t;i++)
    {
        fin>>x>>y>>z>>a>>b>>c>>n;
        cleart(copie);
        copie[2][2]=a;
        copie[1][2]=b;
        copie[0][2]=c;
        power(n-2);
        s1=1LL*x*puteri[0][2];
        s2=1LL*y*puteri[1][2];
        s3=1LL*z*puteri[2][2];
        s=(s1+s2+s3)%MOD;
        fout <<s<<"\n";
    }
    return 0;
}