Cod sursa(job #1808182)

Utilizator Kln1000Ciobanu Bogdan Kln1000 Data 17 noiembrie 2016 14:21:36
Problema Rsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

ifstream f ("rsir.in");
ofstream t ("rsir.out");

const int dim=2;
int mod;

struct matrix
{
    int v[dim][dim];
    matrix()
    {
        memset(v,0,sizeof(v));
    }
    void unit()
    {
        for(int i=0; i<dim; i++) v[i][i]=1;
    }
    matrix operator *(matrix a)
    {
        matrix rez;
        for (int i=0; i<dim; ++i)
            for (int j=0; j<dim; ++j)
                for (int y=0; y<dim; ++y)
                    rez.v[i][j]=(rez.v[i][j]+1LL*v[i][y]*a.v[y][j])%mod;
        return rez;
    }
};

matrix pow(matrix a,int64_t power)
{
    matrix p;
    p.unit();
    for(int64_t i=1; i<=power; i<<=1)
    {
        if(power&i) p=p*a;
        a=a*a;
    }
    return p;
}

int main()
{
    int a,b,x,y,z,t0,t1;
    int64_t n;
    f>>t0>>t1>>a>>b>>x>>y>>z>>mod>>n;
    matrix X,Y,Z;
    X.v[0][0]=t0,X.v[0][1]=t1;
    Y.v[0][0]=0,Y.v[1][0]=1,Y.v[0][1]=x*t0+a,Y.v[1][1]=y*t1+b;
    Z.v[0][1]=z;
    Y=pow(Y,n-1);
    X=X*Y;
    Z=Z*Y;
    t<<(X.v[0][1]+Z.v[0][1])%mod;
    return 0;
}