Cod sursa(job #872215)

Utilizator mitrutstrutMitrea Andrei Ionut mitrutstrut Data 5 februarie 2013 21:31:25
Problema Patrate2 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <stdio.h>
 
   long n,i,j,p[3300],f[1000],r;
   long l,q,lmax,rez[5000];
 
int main(){
    freopen ("patrate2.in","r",stdin);
    freopen ("patrate2.out","w",stdout);
     
    scanf ("%d",&n);
    p[1]=1;l=1;
    for (i=1;i<=n*n;i++){
        r=0;
        for (j=1;j<=l;j++){p[j]=p[j]*2+r;r=p[j]/10;p[j]=p[j]-r*10;}
        while(r){
                 l++;
                 p[l]=r%10;
                 r/=10;
        }
    }
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	f[1]=1;q=1;
    for (i=2;i<=n;i++){
        r=0;
        for (j=1;j<=q;j++){f[j]=f[j]*i+r;r=f[j]/10;f[j]-=(r*10);}
        while (r){
              q++;
              f[q]=r%10;
              r/=10;
        }
    }
    /*r=0;
    lmax=l;
    if (q>lmax)lmax=q;
    for (i=1;i<=lmax;i++){f[i]+=p[i]+r;r=f[i]/10;f[i]=f[i]-(r*10);}
    while (r){
          lmax++;
          f[lmax]=r%10;
          r=r/10;
    }*/
    for (i=1;i<=l;i++)
        for (j=1;j<=q;j++){
            rez[i-1+j]+=p[i]*f[j];
        }
    lmax=l+q-1;
    for (i=1;i<=lmax;i++){
        if (rez[i]>9){rez[i+1]+=rez[i]/10;rez[i]=rez[i]%10;}
    }
    r=rez[lmax+1];
    while (r){
          lmax++;
          rez[lmax]=r%10;
          r/=10;
    }                         
    for (i=lmax;i;i--){
        printf("%d",rez[i]);
    }
    printf("\n");
    return 0;
}