Cod sursa(job #2665743)

Utilizator codruta.miron08Miron Ioana Codruta codruta.miron08 Data 31 octombrie 2020 11:48:22
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
long long int rez[5][5],c[5][5];
void putlog(long long int b[5][5],long long int e,const long long int mod)
{
    while(e != 0)
    {
        if(e % 2 == 1)
        {
            for(int i = 0; i < 3; i++)
            {
                for(int j = 0; j < 3; j++)
                {
                    c[i][j] = 0;
                    for(int k = 0; k < 3; k++)
                        c[i][j] = (c[i][j] + (rez[i][k] * b[k][j])%mod )%mod;

                }
            }
            for(int i = 0; i < 3; i++)
                for(int j = 0; j < 3; j++)
                    rez[i][j] = c[i][j];
        }
        e /= 2;
        for(int i = 0; i < 3; i++)
            for(int j = 0; j < 3; j++)
            {
                c[i][j] = 0;
                for(int k = 0; k < 3; k++)
                    c[i][j] = (c[i][j] + (b[i][k] * b[k][j])% mod)%mod;

            }
        for(int i = 0; i < 3; i++)
            for(int j = 0; j < 3; j++)
                b[i][j] = c[i][j];

    }
}
int main()
{
    int o;
    fin >> o;
    for(int i = 0; i < o; i++)
    {
        int x,y,z,A,B,C;
        long long int b[5][5],n;
        fin >> x >> y >> z >> A >> B >> C >> n;
        rez[0][0] = 1;
        rez[0][1] = 0;
        rez[0][2] = 0;
        rez[1][0] = 0;
        rez[1][1] = 1;
        rez[1][2] = 0;
        rez[2][0] = 0;
        rez[2][1] = 0;
        rez[2][2] = 1;

        b[0][0] = 0;
        b[0][1] = 0;
        b[0][2] = C;
        b[1][0] = 1;
        b[1][1] = 0;
        b[1][2] = B;
        b[2][0] = 0;
        b[2][1] = 1;
        b[2][2] = A;
        putlog(b,n - 2,666013);
        fout <<(rez[0][2] * x + rez[1][2] * y + rez[2][2] * z)%666013 << endl;


    }
    return 0;
}