Cod sursa(job #319327)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 31 mai 2009 15:19:04
Problema Patrate2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.95 kb
#include <cstdio>
#include <cstring>

#define file_in "patrate2.in"
#define file_out "patrate2.out"

#define BASE 1000000000
#define Nmax 10001

int a[Nmax],b[Nmax],sol[Nmax],n,sol1[Nmax];

void citire()
{
    int i,p,l,j;
    char s[Nmax];
    
    scanf("%s", s);
    l = strlen(s);
	//n=0;
    for (i = 1; i <= l; i+=9)
    {
        ++a[0];
        for (j = 8; j >= 0; --j)
            if (l - i-j>= 0)
                a[a[0]] = a[a[0]] * 10 + s[l - i-j] - '0';
			//n=n*10+s[i]-'0';

    }
    n=0;
	i=0;
	while(i<l)
	{
		n=n*10+s[i]-'0';
		i++;
	}
}

inline void MUL(int A[], int B[], int C[])
{
    int i, j, t;

    //memset(C, 0, sizeof(C));
    for (i = 1; i <= A[0]; ++i)
    {
        t = 0;
        for (j = 1; j <= B[0] || t; ++j, t /= BASE)
            C[i + j - 1] = (t += C[i + j - 1] + A[i] * B[j]) % BASE;
        if (i + j - 2 > C[0])
            C[0] = i + j - 2;
    }

    //memcpy(A, C, sizeof(C));
}

inline void MUL1(int A[], int B[])
{
    int i, j, t,C[Nmax];

    memset(C, 0, sizeof(C));
    for (i = 1; i <= A[0]; ++i)
    {
        t = 0;
        for (j = 1; j <= B[0] || t; ++j, t /= BASE)
            C[i + j - 1] = (t += C[i + j - 1] + A[i] * B[j]) % BASE;
        if (i + j - 2 > C[0])
            C[0] = i + j - 2;
    }

    memcpy(A, C, sizeof(C));
}


void mul(int A[], int b)
{
    int i, t;

    for (i = 1, t = 0; i <= A[0] || t; ++i, t /= BASE)
        A[i] = (t += b * A[i]) % BASE;
    A[0] = i - 1;
}

void scrie(int a[])
{
    int i;

    printf("%d", a[a[0]]);
    for (i = a[0]-1; i >= 1; --i)
        printf("%.09d", a[i]);
    printf("\n");
}

int main()
{
	int i;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);

    citire();
    sol[0]=sol[1]=1;
	/*sol1[0]=1;sol1[1]=2;*/
    for (i=1;i<=n*n; ++i)
        mul(sol,2);
    MUL(a,sol,b);
	scrie(b);
	//printf("%d", n);

	fclose(stdin);
    fclose(stdout);

    return 0;
}