Cod sursa(job #991928)

Utilizator sebinechitasebi nechita sebinechita Data 31 august 2013 20:32:32
Problema Patrate2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <cmath>
using namespace std;

void show(long long int *al);
void inm(long long int* al, long long int* bl, long long int* dl);
void transforma(long long int sos, long long int* al);
void fshow(long long int *al);
void fact(long long int n, long long int* al);

ifstream fin ("patrate2.in");
ofstream fout("patrate2.out");
#define MAX 3200

long long int i,s,n,m,a1,t,j,l,d[2]={1,2},k,ci;


long long int a[MAX],b[MAX],c[MAX];

void inm(long long int* al, long long int* bl, long long int* dl)
{
    long long int cl[MAX]={0};
    cl[0]=al[0]+bl[0]-1;
    for(i=1;i<=al[0];i++)
    {
        for(j=1;j<=bl[0];j++)
        {
            cl[i-1+j]+=al[i]*bl[j];

        }
    }

    for(i=1;i<=cl[0];i++)
    {

        if(cl[i]>9)
        {
            cl[i+1]+=cl[i]/10;
            cl[i]%=10;
        }
    }
    if(cl[i])
        cl[0]++;

    for(i=0;i<=cl[0];i++)
    {
        dl[i]=cl[i];
    }

}

void transforma(long long int sos, long long int* al)
{
    long long int k=0;

    while(sos)
    {
        al[++k]=sos%10;

        sos/=10;
    }


    al[0]=k;

}

void show(long long int *al)
{
    for(i=al[0];i>=1;i--)
    {
        cout<<al[i];
    }
}

void fshow(long long int *al)
{
    for(i=al[0];i>=1;i--)
    {
        fout<<al[i];
    }
}

void fact(long long int n, long long int* al)
{
    al[0]=al[1]=1;
    for(k=2;k<=n;k++)
    {
        long long int par[4];
        ci=k;
        transforma(ci,par);
        inm(par, al, al);

    }
}

void doi(long long int los, long long int* al)
{
    if(los<32)
        transforma(1<<los,al);
    else if((los&1)==0)
    {
        doi(los/2, al);
        inm(al,al,al);
    }
    else
    {
        doi(los-1, al);
        inm(d,al,al);
    }
}
int main()
{

    fin>>n;

    doi(n*n,a);

    fact(n,b);

    inm(a,b,c);

    fshow(c);




    return 0;
}