Cod sursa(job #391842)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 6 februarie 2010 13:27:14
Problema Patrate2 Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include<cstdio>
#define max 1000000
#define baza 10000
int a[max],s[max],c[max],n,b,i,j,t,val,p;


void init()
{
	int i,n=c[0];
	for(i=1;i<=n;i++)
		c[i]=0;
	c[0]=1;
}
int main()

{
	freopen("patrate2.in","r",stdin);
	freopen("patrate2.out","w",stdout);
	
	scanf("%d",&n);
	
	b=n*n;
	s[0]=s[1]=1;
	a[0]=1; a[1]=2;
	
	while(b)
	{
		if(b&1)
		{
			init();
			for(i=1;i<=a[0];i++)
			{
				for(t=0,j=1;j<=s[0]||t;j++,t/=baza)
				{
					c[i+j-1]=(t+=c[i+j-1]+a[i]*s[j])%baza;
					
					if(i+j-2>c[0]) c[0]=i+j-2;
				}
			}
			for(i=1;i<=c[0];i++) s[i]=c[i];
			s[0]=c[0];
		}
	init();	
	for(i=1; i<=a[0]; i++)  
	{
		for(t=0,j=1;j<=a[0]||t;j++,t/=baza)
			c[i+j-1]=(t+=c[i+j-1]+a[i]*a[j])%baza;
		
		if(i+j-2>c[0]) c[0]=i+j-2;  
	}
		
		for(i=1;i<=c[0];i++)  a[i]=c[i];  
		a[0]=c[0]; 
		
	b>>=1;
	}
a[0]=1; a[1]=1;  
  
  for(b=1;b<=n;b++)  
  { 
	  t=0;  
      
	  for(i=1;i<=a[0]||t;i++,t/=baza)  
		  a[i]=(t+=a[i]*b)%baza;     
	  
	  a[0]=i-1;  
  }
 init();
  for(i=1; i<=a[0]; i++)  
  {
	  for(t=0,j=1;j<=s[0]||t;j++,t/=baza)  
		  c[i+j-1]=(t+=c[i+j-1]+a[i]*s[j])%baza;  
	  
	  if(i+j-2>c[0]) c[0]=i+j-2;  
  }
  
n=s[0];
for(i=0;i<=n;i++) s[i]=0;

n=c[0];

for(i=1;i<=n;i++)
{
	if(c[i])
	{
		p=(i-1)*4;
		val=c[i];
		
		while(val)
		{
			s[++p]=val%10;
			val/=10;
		}
		s[0]=p;
	}
}

  
for(i=s[0];i>0;i--) printf("%d",s[i]);
 
 return 0;
}