Cod sursa(job #542387)

Utilizator iulishorIulian Popescu iulishor Data 26 februarie 2011 12:52:51
Problema Sortari2 Scor 10
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 2 Marime 0.94 kb
#include<fstream.h>
#include<math.h>
int n,i,j,m,tt,nr;
int a[200],b[200],s[202][202][200];
void add(int a[], int b[])
{
	int i,t=0;
	for(i=1; i<=a[0] || i<=b[0] || t; i++, t=t/10)
		a[i]=(t+=a[i]+b[i])%10;
	a[0]=i-1;
}
void mul(int a[],int x)
{ 
	int i;
	unsigned long t=0;
	for (i=1;i<=a[0];i++)
    { 
		a[i]=a[i]*x+t;
		t=a[i]/10;
		a[i]=a[i]%10;
    }
	while (t) 
    { 
		a[++a[0]]=t%10;
		t/=10;
    }
}
int main()
{
	ifstream f("sortari2.in");
	ofstream g("sortari2.out");
	f>>n;
	if(n==2)
		g<<0;
	else
		if(n==3)
			g<<1;
		else
		{
	s[0][0][0]=1;
	s[0][0][1]=1;
	for(i=0;i<=n;i++)
		for(j=0;j<=i;j++)
			s[i][j][0]=1;
	for(i=1;i<=n;i++)
		for(j=1;j<=i;j++)
		{
			memcpy(a,s[i-1][j-1],sizeof(s[i-1][j-1]));
			a[0]=s[i-1][j-1][0];
			memcpy(b,s[i-1][j],sizeof(s[i-1][j]));
			b[0]=s[i-1][j][0];
			tt=i-1;
			nr=0;
			mul(b,tt);
			add(a,b);
			memcpy(s[i][j],a,sizeof(a));
		}
	tt=sqrt(n);
	for(i=s[n][tt][0];i>=1;i--)
		g<<s[n][tt][i];
		}
}