Cod sursa(job #80949)

Utilizator swift90Ionut Bogdanescu swift90 Data 30 august 2007 19:21:52
Problema Patrate2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<stdio.h>
#include<string.h>
int nr[10000],fac[10000],aux[10000];
int main(){
	freopen("patrate2.in","r",stdin);
	freopen("patrate2.out","w",stdout);
	int n,i,j,ax,t;
	scanf("%d",&n);
	
	nr[0]=1;
	nr[1]=2;
	for(j=1;j<n;j++){
		for (i = 1,t=0; i <= nr[0] || t; i++, t /= 10)
			nr[i] = (t += nr[i] * 2) % 10;
		nr[0] = i - 1;
	}
	for(i=0;i<=nr[0];i++)
		aux[i]=nr[i];
	for(ax=1;ax<n;ax++){
		memset(fac, 0, sizeof(fac));
		for (i = 1; i <= nr[0]; i++){
			for (t=0, j=1; j <= aux[0] || t; j++, t/=10)
				fac[i+j-1]=(t+=fac[i+j-1]+nr[i]*aux[j])%10;
			if (i + j - 2 > fac[0])
				fac[0] = i + j - 2;
		}
		memcpy(nr, fac, sizeof(fac));
	}
	memset(fac,0,sizeof(fac));
	fac[0]=fac[1]=1;
	for(j=1;j<=n;j++){
		for (i = 1,t=0; i <= fac[0] || t; i++, t /= 10)
			fac[i] = (t += fac[i] * j) % 10;
		fac[0] = i - 1;
	}
	
	memset(aux, 0, sizeof(aux));
	for (i = 1; i <= nr[0]; i++){
		for (t=0, j=1; j <= fac[0] || t; j++, t/=10)
			aux[i+j-1]=(t+=aux[i+j-1]+nr[i]*fac[j])%10;
		if (i + j - 2 > aux[0]) aux[0] = i + j - 2;
	}
	
	for(i=aux[0];i>0;i--)
		printf("%d",aux[i]);
	printf("\n");
	
	return 0;
}