Cod sursa(job #1467125)

Utilizator cojocarugabiReality cojocarugabi Data 2 august 2015 20:19:26
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
# include <bits/stdc++.h>
using namespace std;
const int mod = 666013;
ifstream fi("iepuri.in");
ofstream fo("iepuri.out");
int s[3][3];
void mult(int a[3][3],int b[3][3],int c[3][3])
{
    for (int i = 0;i < 3;++i)
        for (int j = 0;j < 3;++j) c[i][j] = 0;
    for (int i = 0;i < 3;++i)
        for (int j = 0;j < 3;++j)
            for (int k = 0;k < 3;++k)
                c[i][j] += (1ll * a[i][k] * b[k][j]) % mod,c[i][j] %= mod;
}
void pw(int n)
{
    --n;
    int ans[3][3],c[3][3];
    for (int i = 0;i < 3;++i)
        for (int j = 0;j < 3;++j) ans[i][j] = s[i][j];
    while (n)
    {
        if (n&1)
        {
            mult(ans,s,c);
            for (int i = 0;i < 3;++i)
                for (int j = 0;j < 3;++j) ans[i][j] = c[i][j];
        }
        mult(s,s,c);
        for (int i = 0;i < 3;++i)
            for (int j = 0;j < 3;++j) s[i][j] = c[i][j];
        n >>= 1;
    }
    for (int i = 0;i < 3;++i)
        for (int j = 0;j < 3;++j) s[i][j] = ans[i][j];
}
int main(void)
{
    int t;
    fi>>t;
    int x,y,z,a,b,c,n;
    while (t --)
    {
        fi>>x>>y>>z>>a>>b>>c>>n;
        s[0][0] = 0;
        s[0][1] = 1;
        s[0][2] = 0;
        s[1][0] = 0;
        s[1][1] = 0;
        s[1][2] = 1;
        s[2][0] = c;
        s[2][1] = b;
        s[2][2] = a;
        pw(n);
        fo << (1ll * s[0][0] * x + 1ll * y * s[0][1] + 1ll * z * s[0][2]) % mod << '\n',0;
    }
    return 0;
}