Cod sursa(job #2058825)

Utilizator HD650Stoicescu Adrian Nicolae HD650 Data 6 noiembrie 2017 10:46:10
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <iostream>
#include <fstream>
using namespace std;
const int mod = 666013;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
long long m[3][3];
long long p[3][3];
void inmm()
{
    long long t[3][3];
    for(int i=1; i<=3; i++)
        for(int j=1; j<=3; j++)
            for(int k=1; k<=3; k++)
                t[i][j]+=m[i][k]*m[k][j]%mod;
}

void inmp()
{
    long long t[3][3];
    for(int i=1; i<=3; i++)
        for(int j=1; j<=3; j++)
            for(int k=1; k<=3; k++)
                t[i][j]+=m[i][k]*p[k][j]%mod;
}

long long iep(int n)
{
    while(n > 0)
    {
        if(n % 2 == 0)
        {
            n /= 2;
            inmm();///m*=m;
        }
        else
        {
            n--;
            inmp();///p *= m;
        }
    }
    return p[0][0];
}
int main()
{
    int nn;
    f>>nn;
    for(int mm=1; mm<=nn; mm++)
    {
        int x,y,z,a,b,c,n;
        f >>x>>y>>z>>a>>b>>c>>n;
        for(int i=1; i<=2; i++)
            for(int j=1; j<=3; j++)
                if(i==2&&j==1 || i==3&&j==2)m[i][j]==1;
                else m[i][j]==0;
        m[1][3]=a;
        m[2][3]=b;
        m[3][3]=c;
        for(int i=1; i<=3; i++)
            for(int j=1; j<=3; j++)
                if(i==j)p[i][j]=1;
                else p[i][j]==0;

        g << iep(n - 3)<<' ';
        for(int i = 1; i <= 3; i++)
        {
            for(int j = 1; j <= 3; j++)
                cout << m[i][j] << " ";
            cout << endl;
        }
        cout<<endl;
        for(int i = 1; i <= 3; i++)
        {
            for(int j = 1; j <= 3; j++)
                cout << p[i][j] << " ";
            cout << endl;
        }
        cout<<endl;
    }
    return 0;
}