Cod sursa(job #981645)

Utilizator t.g.g.tt.g.g.t t.g.g.t Data 7 august 2013 17:41:41
Problema Patrate2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.5 kb
#include <fstream>

using namespace std;

int n,r,l;

long long pr1[25],pr2[350],pr3[400],v,p2;

const int r1=999999999,r2=1000000000;

int main ()
{
    ifstream in ("patrate2.in");
    in>>n;
    in.close();
    pr1[0]=1; pr1[1]=1; pr2[0]=1; pr2[1]=1;
    for (int i=1;i<=n;++i)
    {
        for (int j=1;j<=pr1[0];++j)
        {
            pr1[j]=pr1[j]*i+r;
            r=0;
            if (pr1[j]>r1)
            {
                r=pr1[j]/r2;
                pr1[j]=pr1[j]%r2;
            }
        }
        l=pr1[0];
        while (r>0) { ++l; pr1[l]=r; r=0; if (pr1[l]>r1) { r=pr1[l]/r2; pr1[l]=pr1[l]%r2; } }
        if (l>pr1[0]) pr1[0]=l;
    }
    v=(n*n)/30;
    p2=1<<30;
    for (int i=1;i<=(v);++i)
    {
        for (int j=1;j<=pr2[0];++j)
        {
            pr2[j]=pr2[j]*p2+r;
            r=0;
            if (pr2[j]>r1)
            {
                r=pr2[j]/r2;
                pr2[j]=pr2[j]%r2;
            }
        }
        l=pr2[0];
        while (r>0) { ++l; pr2[l]=r; r=0; if (pr2[l]>r1) { r=pr2[l]/r2; pr2[l]=pr2[l]%r2; } }
        if (pr2[0]<l) pr2[0]=l;
    }
    v=(n*n)%30;
    for (int i=1;i<=(v);++i)
    {
        for (int j=1;j<=pr2[0];++j)
        {
            pr2[j]=pr2[j]*2+r;
            r=0;
            if (pr2[j]>r1)
            {
                r=pr2[j]/r2;
                pr2[j]=pr2[j]%r2;
            }
        }
        l=pr2[0];
        while (r>0) { ++l; pr2[l]=r; r=0; if (pr2[l]>r1) { r=pr2[l]/r2; pr2[l]=pr2[l]%r2; } }
        if (pr2[0]<l) pr2[0]=l;
    }
    for (int i=1;i<=pr1[0];++i)
    {
        for (int j=1;j<=pr2[0];++j)
        {
            pr3[i+j-1]=pr3[i+j-1]+(pr1[i]*pr2[j])+r;
            r=0;
            if (pr3[i+j-1]>r1) { r=pr3[i+j-1]/r2; pr3[i+j-1]%=r2; }
        }
        l=i+pr2[0]-1;
        while (r>0) { ++l; pr3[l]=pr3[l]+r; r=0; if (pr3[l]>r1) { r=pr3[l]/r2; pr3[l]%=r2; } }
        if (pr3[0]<l) pr3[0]=l;
    }
    ofstream out ("patrate2.out");
    out<<pr3[pr3[0]];
    for (int i=pr3[0]-1;i>=1;--i)
    {
        if (pr3[i]>99999999) out<<pr3[i];
        else if (pr3[i]>9999999) out<<"0"<<pr3[i];
        else if (pr3[i]>999999) out<<"00"<<pr3[i];
        else if (pr3[i]>99999) out<<"000"<<pr3[i];
        else if (pr3[i]>9999) out<<"0000"<<pr3[i];
        else if (pr3[i]>999) out<<"00000"<<pr3[i];
        else if (pr3[i]>99) out<<"000000"<<pr3[i];
        else if (pr3[i]>9) out<<"0000000"<<pr3[i];
        else out<<"00000000"<<pr3[i];
    }
    out.close();

}