Cod sursa(job #1610795)

Utilizator DragodanAlexandraDragodan Alexandra DragodanAlexandra Data 23 februarie 2016 18:54:12
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <iostream>
#include<fstream>
#define mod 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
int n,p;
long long a[4][4],q[4][4],x[4][4];
  long long c[4][4];

long long inm(long long a[4][4],long long b[4][4],long long c[4][4])
{
    int i,j,k;
    for(i=1;i<=3;i++)
    for(j=1;j<=3;j++)
    for(k=1;k<=3;k++)
    c[i][j]=(c[i][j]+a[i][k]*b[k][j])%mod;

}

long long copiez(long long a[4][4],long long b[4][4])
{
    int i,j;
    for(i=1;i<=3;i++)
    for(j=1;j<=3;j++)
    a[i][j]=b[i][j];
}

void rezolvare()
{
    for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) x[i][j]=0;
    x[1][1]=x[2][2]=x[3][3]=1;

    while(p)
    {
        if(p%2==1)
        {
            for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) c[i][j]=0;
            inm(x,a,c);
            copiez(x,c);
            p--;

        }
        else
        {
            for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) c[i][j]=0;
            inm(a,a,c);
            copiez(a,c);
            p=p/2;
        }
    }
    int i;
    long long sum=0;

     for(i=1;i<=3;i++) sum=(sum+x[1][i]*q[i][1])%mod;
     g<<sum<<"\n";
}

void citire()
{
    f>>n;
    for(int i=1;i<=n;i++)
    {

            int x,y,z;
            f>>x>>y>>z;
            a[1][1]=x;
            a[1][2]=y;
            a[1][3]=z;
            a[2][1]=a[3][2]=1;
            a[2][2]=a[2][3]=a[3][1]=a[3][3]=0;
            f>>q[1][1]>>q[2][1]>>q[3][1];
            f>>p;
            p-=2;

           rezolvare();

    }
}
int main()
{
    citire();

    return 0;
}