Cod sursa(job #2007327)

Utilizator dragos231456Neghina Dragos dragos231456 Data 2 august 2017 15:20:34
Problema Patrate2 Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <fstream>
#include <iomanip>
#define base 1000000000
using namespace std;
ifstream f("patrate2.in");
ofstream g("patrate2.out");
long long n[2005],sol[2005],p,fct,c[2005];

void golire()
{
    for(int i=1;i<=c[0];++i) c[i]=0;
}

void INMULTIRE(long long a[],long long b[])
{
    golire();
    for(int i=1;i<=a[0];++i)
    {
        for(int j=1;j<=b[0];++j)
        {
            c[j+i-1]+=(a[i]*b[j]);
        }
    }
    int i=1;
    while(c[i])
    {
        c[i+1]+=c[i]/base;
        c[i]%=base;
        ++i;
    }
    c[0]=i-1;
    for(i=0;i<=c[0];++i)
    {
        a[i]=c[i];
    }
}

void put(long long p)
{
    sol[0]=sol[1]=1;
    while(p)
    {
        if(p%2) INMULTIRE(sol,n);
        p/=2;
        INMULTIRE(n,n);
    }
}

void SCALAR(long long sol[],long long nr)
{
    for(int i=1;i<=sol[0]+1;++i)
    {
        sol[i]=sol[i]*nr+sol[i-1]/base;
        sol[i-1]%=base;
    }
    if(sol[sol[0]+1]) ++sol[0];
}

int main()
{
    f>>fct;
    p=fct*fct; n[1]=2; n[0]=1;
    put(p);
    for(int j=1;j<=fct;++j)
    {
        SCALAR(sol,j);
    }
    g<<sol[sol[0]];
    --sol[0];
    for(int j=sol[0];j>=1;--j)
    {
        g<<setw(9)<<setfill('0')<<sol[j];
    }
    return 0;
}