Cod sursa(job #1742550)

Utilizator otnielMercea Otniel otniel Data 16 august 2016 16:39:44
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<iostream>
#include<fstream>
using namespace std;
long long x,y,z;
long long a1,b1,c1;
long long n;
ofstream g("iepuri.out");
void inmultire(long long a[3][3],long long b[3][3],long long c[3][3])
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
             for(int q=0;q<3;q++)
                c[i][j]=(c[i][j]+a[i][q]*b[q][j])%666013;
}

void ridicare(long long a[3][3],long long rez[3][3],long long d[3][3])
{   n=n-2;
    while(n)
    {
        if(n%2)
        {
            inmultire(a,rez,d);
            for(int i=0;i<3;i++)
                for(int j=0;j<3;j++)
                {rez[i][j]=d[i][j];
                d[i][j]=0;}
            n--;
        }
        inmultire(a,a,d);
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
            {
                a[i][j]=d[i][j];
                d[i][j]=0;
            }
        n=n/2;
    }

    g<<(x*rez[0][2]+y*rez[1][2]+z*rez[2][2])%666013<<endl;
}
int main()
{
        ifstream f("iepuri.in");
        ofstream g("iepuri.out");

    int t;
    f>>t;
    while(t)
    {
    long long a[3][3]={0,0,1,1,0,1,0,1,1};
    long long d[3][3]={0,0,0,0,0,0,0,0,0};
    long long rez[3][3]={1,0,0,0,1,0,0,0,1};


        f>>x>>y>>z>>a1>>b1>>c1;

        f>>n;
        a[0][2]=c1;
        a[1][2]=b1;
        a[2][2]=a1;

        ridicare(a,rez,d);
    t--;
    }



}