Cod sursa(job #2506763)

Utilizator DragosSDragos Sarbu DragosS Data 8 decembrie 2019 18:58:36
Problema Iepuri Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include<bits/stdc++.h>
using namespace std;

ifstream f("iepuri.in");
ofstream g("iepuri.out");

struct matrice
{
    long long m[3][3];
};



matrice inmultire(matrice a, matrice b)
{
    matrice c;

    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            c.m[i][j]=0;
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            for(int k=0;k<3;k++)
            {
                c.m[i][j]+=a.m[i][k]*b.m[k][j]%666013;
            }
            c.m[i][j]%=666013;
        }
    }
    return c;
}

matrice putere(matrice a,long long n)
{
     matrice x;
     for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            if(i==j)
                x.m[i][j]=1;
            else
                x.m[i][j]=0;
     while(n>0)
     {
        if(n%2==0)
        {
            a=inmultire(a,a);
            n/=2;
        }
        else
        {
            x=inmultire(x,a);
            n--;
        }
     }
     return x;
}

int main()
{
    long long n;
    matrice mat;
    f>>n;
    for(long long i=1;i<=2;i++)
    {
        long long x,y,z,a,b,c,nr;
        f>>x>>y>>z>>a>>b>>c>>nr;

        mat.m[1][0]=mat.m[2][1]=1;
        mat.m[0][2]=c;
        mat.m[1][2]=b;
        mat.m[2][2]=a;
        mat.m[0][0]=mat.m[0][1]=mat.m[1][1]=mat.m[2][0]=0;

        mat=putere(mat,nr-2);
        g<<(mat.m[0][2]*x+mat.m[1][2]*y+mat.m[2][2]*z)%666013<<'\n';
    }
}