Cod sursa(job #2084917)

Utilizator OlivianOlivian Dan Cretu Olivian Data 9 decembrie 2017 12:57:55
Problema Nunta Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<cstdio>
#include<vector>
using namespace std;
int dim;
struct matrice{
    vector<vector<int> > v;
    matrice()
    {
        v.resize(dim+1,vector<int>(dim+1,0));
    }
    void unitate()
    {
        for(int i=1;i<=dim;i++) v[i][i]=1;
    }
    matrice operator *(const matrice &aux) const
    {
        matrice ret;
        for(int i=1;i<=dim;i++)
            for(int j=1;j<=dim;j++)
            for(int k=1;k<=dim;k++) ret.v[i][j]=(ret.v[i][j]+1LL*v[i][k]*aux.v[k][j]);
            return ret;
    }
};
matrice rid_put(matrice m,int k)
{
    matrice ret;
    ret.unitate();
    for(;k;k>>=1)
    {
        if(k&1) ret=ret*m;
        m=m*m;
    }
    return ret;
}
int main()
{
    freopen("nunta.in","r",stdin);
    freopen("nunta.out","w",stdout);
    int k;
    scanf("%d",&k);
    if(k<=3) {printf("%d",k);return 0;}
    dim=2;
    matrice m;
    m.v[1][2]=m.v[2][2]=m.v[2][1]=1;
    m.v[1][1]=0;
    m=rid_put(m,k-2);
    printf("%d",(m.v[2][1]+2*m.v[2][2]));

}