Cod sursa(job #2066224)

Utilizator Claudiu07Pana Claudiu Claudiu07 Data 14 noiembrie 2017 19:47:47
Problema Iepuri Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
const int mod=666013;
int a,b,c,x,y,z;

void inmm(int m[][3])
{
    long long z[3][3];
    for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
        {
            z[i][j]=0;
            for(int k=0; k<3; k++)
                z[i][j]+=1LL*m[i][k]*m[k][j]%mod;
        }
    for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
            m[i][j]=z[i][j]%mod;
}
void inmp(int p[][3], int m[][3])
{
    long long z[3][3];
    for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
        {
            z[i][j]=0;
            for(int k=0; k<3; k++)
                z[i][j]+=1LL*p[i][k]*m[k][j]%mod;
        }
    for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
            p[i][j]=z[i][j]%mod;
}
int powmat(int k)
{
    int p[3][3]= {{1,0,0},{0,1,0},{0,0,1}};
    int m[3][3]= {{a,1,0},{b,0,1},{c,0,0}};
        while(k>0)
        {
            if(k%2==0)
            {
                inmm(m);
                k/=2;
            }
            else
            {
                inmp(p,m);
                k--;
            }
        }
        return (z*p[0][0]+y*p[1][0]+x*p[2][0])%mod;
    }
    int main()
    {
        int n,T;
        f>>T;
        while(T--)
        {
            f>>x>>y>>z>>a>>b>>c>>n;
            g<<powmat(n-2)<<'\n';
        }
        return 0;
    }