Cod sursa(job #1719593)

Utilizator giotoPopescu Ioan gioto Data 19 iunie 2016 18:15:40
Problema Patrate2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <cstdio>
using namespace std;

int n,nr,b[102],a[4002],c[4002];
int main()
{
    freopen("patrate2.in", "r", stdin);
    freopen("patrate2.out", "w", stdout);
    scanf("%d", &n);
    int arie=n*n;
    while(arie>0){
        b[++nr]=arie%2;
        arie/=2;
    }
    a[0]=1;a[1]=1;
    for(int i=nr;i>=1;--i){
        c[0]=a[0]+a[0]-1;
        for(int j=1;j<=a[0];++j)
            for(int t=1;t<=a[0];++t){
                c[j+t-1]+=a[j]*a[t];
            }
        a[0]=c[0];
        int t=0;
        for(int i=1;i<=c[0];++i){
            t=(c[i]+=t)/10;
            c[i]=c[i]%10;
            a[i]=c[i];c[i]=0;
        }
        if(t)
            a[++a[0]]=t;

        if(b[i]==1){
            for(int j=a[0];j>=1;--j){
                a[j]*=2;a[j+1]+=a[j]/10;
                a[j]=a[j]%10;
            }
            if(a[a[0]+1]>0) ++a[0];
        }
    }
    for(int j=a[0];j>=1;--j){
        a[j]*=n;a[j+1]+=a[j]/10;
        a[j]=a[j]%10;
    }
    if(a[a[0]+1]>0) ++a[0];
    for(int i=a[0];i>=1;--i)
        printf("%d",a[i]);
    return 0;
}