Cod sursa(job #73590)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 19 iulie 2007 17:43:54
Problema Sarpe Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<stdio.h>
#include<string.h>
#define VAL 1000000
long n,w;
int q[VAL],e[VAL],C[VAL];;
long i, j, t;

void citire()
{
	freopen("sarpe.in","r",stdin);
	scanf("%ld", &n);
	fclose(stdin);
}

void printare()
{
	for (int i=q[0]; i>=1; i--)
		printf("%d",q[i]);
}

void transf(long q, int a[VAL])
{
	while (q>0)
	{
		a[++a[0]]=q%10;	
		q/=10;
	}
}

/*void mult()//(int q[VAL], int e[VAL])
{  
	long i, j, t;
    int C[VAL];
    memset(C, 0, sizeof(C));  
    for (i = 1; i <= q[0]; i++)  
    {
		for (t=0, j=1; j <= e[0] || t; j++, t/=10)  
			C[i+j-1]=(t+=C[i+j-1]+q[i]*e[j])%10;  
		if (i + j - 2 > C[0]) 
			C[0] = i + j - 2;
	}
    memcpy(q, C, sizeof(C));
}*/

void add(int A[VAL], int B[VAL])
{
	int i, t = 0;
	for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
		A[i] = (t += A[i] + B[i]) % 10;
	A[0] = i - 1;
}

void numere_mari()
{
//	transf(4*n,q);
	//n*=4;
	//q=2*n-1;
	memset(e,0,sizeof(e));
	memset(q,0,sizeof(q));
	transf(2*(n-1),e);
	transf(n-2,q);
    
    memset(C, 0, sizeof(C));  
    for (i = 1; i <= q[0]; i++)  
    {
		for (t=0, j=1; j <= e[0] || t; j++, t/=10)  
			C[i+j-1]=(t+=C[i+j-1]+q[i]*e[j])%10;  
		if (i + j - 2 > C[0]) 
			C[0] = i + j - 2;
	}
    memcpy(q, C, sizeof(C));
//	mult();//(q,e);
	memset(e,0,sizeof(e));
	transf(4*n,e);
	add(q,e);

}

int main()
{
	citire();
	freopen("sarpe.out","w",stdout);
	if (n>1)
	{
		//w=4*n+2*(n-1)*(n-2);
		numere_mari();
		printare();
	}
	else 
	{
		w=2;
		printf("%ld",w);
	}
	fclose(stdout);
	return 0;
}