Cod sursa(job #424912)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 25 martie 2010 12:19:41
Problema Patrate2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<cstdio>
#define Nmax 1000000
#define baza 10000
int a[Nmax],s[Nmax],c[Nmax],n,b,i,j,t,val,p;


void init(int c[])
{
	int i,n=c[0];
	for(i=n+1;i<Nmax;i++)
		c[i]=0;
}
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)
		{
			c[0]=0;
			init(a); init(s); init(c);
			c[0]=1;
			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];
		}
	c[0]=0;
	init(a); init(s); init(c);
	c[0]=1;
	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;  
  }
c[0]=0;
init(a); init(s); init(c);
c[0]=1;
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;
}