Cod sursa(job #1093176)

Utilizator raluca1234Tudor Raluca raluca1234 Data 27 ianuarie 2014 19:43:34
Problema Patrate2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
//PATRATE2- INFOARENA
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int a[10000],b[10000],c[10000],rez[10000];


void inmultire2(int a[])
{
    int i,t=0;
    for(i=1;i<=a[0]||t;i++)
    {
        a[i]=a[i]*2+t;
        t=a[i]/1000;
        a[i]=a[i]%1000;
    }
    a[0]=i-1;
}

void inmultires(int a[],int m)
{
    int i,t=0;
    for(i=1;i<=a[0]||t;i++)
    {
        a[i]=a[i]*m+t;
        t=a[i]/1000;
        a[i]=a[i]%1000;
    }
    a[0]=i-1;

}

//Inmultire 2 nr. mari
void inmultirem(int a[], int b[])
{
    int i,j,t=0;
    rez[0]=a[0];
    memset(rez,0,sizeof(rez));
    for(i=1;i<=a[0];i++)
    {
        for(j=1;j<=b[0]||t;j++)
        {
            rez[i+j-1]+=a[i]*b[j]+t;
            t=rez[i+j-1]/1000;
            rez[i+j-1]=rez[i+j-1]%1000;
        }
        if(i+j-2>rez[0])
            rez[0]=i+j-2;
    }
    memcpy(a,rez,sizeof(rez));
}

int main()
{
    ifstream f("patrate2.in");
    ofstream g("patrate2.out");
    int n,i;
    f>>n;
    a[1]=1;
    a[0]=1;
    for(i=1; i<=n; i++)
        inmultire2(a);
    b[1]=1;
    b[0]=1;
    for(i=1; i<=n*(n-1); i++)
        inmultire2(b);
    inmultirem(a,b);
    c[0]=1;
    c[1]=1;
    for(i=2; i<=n; i++)
        inmultires(c,i);
    inmultirem(c,a);
    for(i=c[0];i>=1;i--)
    {
        if(i<c[0])
        {
            if(c[i]>=100)
                g<<c[i];
            else
            if(c[i]>=10)
                g<<0<<c[i];
            else
                g<<0<<0<<c[i];
        }
        else
            g<<c[i];
    }
    return 0;
}