Cod sursa(job #524381)

Utilizator loginLogin Iustin Anca login Data 21 ianuarie 2011 00:14:21
Problema Nunta Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
# include <fstream>
# include <iostream>
# define DIM 300
# define BB 10
using namespace std;
int n, sol[DIM], rez[DIM];

void inm(int A[], int b)
{
    int q, t=0;
    for(int i=1;i<=A[0];++i)
	{
		q=A[i]*b+t;
		A[i]=q%10;
		t=q/10;
	}
	while (t)
	{
		A[++A[0]]=t%10;
		t/=10;
	}
}

void add(int a[], int b[])
{
	int N;
    if(a[0]<b[0])
    {
		for(int i=a[0]+1;i<=b[0];++i)
			a[i]=0;
		N=b[0];
	}
	else
	{
		for(int i=b[0]+1;i<=a[0];++i)
			b[i]=0;
		N=a[0];
	}
	int q, t=0;
	for(int i=1;i<=N;++i)
	{
		q=a[i]+b[i]+t;
		a[i]=q%10;
		t=q/10;
	}
	a[0]=N;
	while (t)
	{
		a[++a[0]]=t%10;
		t/=10;
	}
}

void calc (int a, int b)
{
	int p=1, j=2, i=a+1;
	rez[0]=rez[1]=1;
	for(;j<=b && i<=a+b;++i)
	{
		p*=i;
		while(j<=b && p%j==0)
			p/=j, ++j;
	}
	inm(rez,p);
	for(;i<=a+b;++i)
		inm(rez, i);
	add(sol, rez);
}

int main ()
{
	ifstream fin ("nunta.in");
	ofstream fout ("nunta.out");
	fin>>n;
	sol[0]=1;sol[1]=0;
	for(int i=0;2*i<=n;++i)
		calc(i, n-2*i);
	for(int i=sol[0];i;--i)
		fout<<sol[i];
	return 0;
}