Cod sursa(job #1521565)

Utilizator diana-t95FMI Tudoreanu Diana Elena diana-t95 Data 10 noiembrie 2015 17:42:52
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <iostream>
#include <fstream>
using namespace std;
#define mod 666013
struct mat
{
    int a[3][3];
    mat operator*(const mat& other)
    {
        mat answer;
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                answer.a[i][j] = 0;
                for (int k = 0; k < 3; k++)
                {
                    answer.a[i][j] += ((long long)a[i][k]*other.a[k][j])%mod;
                }
                answer.a[i][j] = (long long)answer.a[i][j]%mod;
            }
        }
        return answer;
    }
};
mat init;

mat f(int n)
{
    if (n==1)
        return init;
    else
    {
        mat x = f(n/2);
        x = x*x;
        if (n%2 == 0)
            return x;
        else
            return x*init;
    }
}
int main()
{
    int n, a, b, c, x, y, z;
    int t;
    ifstream ff("iepuri.in");
    ofstream g("iepuri.out");
    ff>>t;
    while(t--)
    {
        ff>>x>>y>>z>>a>>b>>c>>n;
        init.a[0][0] = 0;
        init.a[0][1] = 1;
        init.a[0][2] = 0;
        init.a[1][0] = 0;
        init.a[1][1] = 0;
        init.a[1][2] = 1;
        init.a[2][0] = c;
        init.a[2][1] = b;
        init.a[2][2] = a;
        mat ans = f(n-2);
        int cv = 3;
        g<<((long long)ans.a[cv-1][0]*x%mod + (long long)ans.a[cv-1][1]*y %mod + (long long)ans.a[cv-1][2]*z %mod)%mod<<'\n';
    }
}