Cod sursa(job #2303110)

Utilizator bogdi1bogdan bancuta bogdi1 Data 15 decembrie 2018 17:14:31
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <cstring>
using namespace std;
int mat[3][3];
int sol[3][3];
const int mod = 666013;
void mult(int a[3][3], int b[3][3])
{
    int c[3][3];
    int i,j,k;
    memset(c, 0, sizeof(c));
    for(i=0; i<=2; i++)
        for(j=0; j<=2; j++)
            for(k=0; k<=2; k++)
                c[i][j]=(c[i][j]+a[i][k]*1LL*b[k][j])%mod;
    for(i=0; i<=2; i++)
        for(j=0; j<=2; j++)
            a[i][j]=c[i][j];
}
void lgput(int n)
{
    while(n){
        if(n%2==1)
            mult(sol, mat);
        mult(mat, mat);
        n>>=1;
    }
}
int main()
{   freopen("iepuri.in", "r",stdin);
    freopen("iepuri.out", "w",stdout);
    int t,i,x,y,z,a,b,c,n;
    scanf("%d", &t);
    for(i=1; i<=t; i++){
        scanf("%d%d%d%d%d%d%d", &x, &y, &z, &a, &b, &c, &n);
        sol[0][0]=x;
        sol[0][1]=y;
        sol[0][2]=z;
        mat[0][0]=mat[0][1]=mat[1][1]=mat[2][0]=0;
        mat[1][0]=mat[2][1]=1;
        mat[0][2]=c;
        mat[1][2]=b;
        mat[2][2]=a;
        lgput(n-2);
        printf("%d\n", sol[0][2]);
    }
    return 0;
}