Cod sursa(job #204535)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 24 august 2008 22:26:17
Problema Sarpe Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <stdio.h>

#define BAZA 10000
#define N_MAX 10010

int N;
int REZ[N_MAX];
int REZ1[N_MAX];
int REZ2[N_MAX];
int REZ3[N_MAX];
int REZ4[N_MAX];
int REZ5[N_MAX];
int REZ6[N_MAX];


void inmultire_patru(int A[])
{
int i,t=0;

for (i=1;i<=A[0] || t;++i,t/=BAZA)
      A[i]=(t+=A[i]*4)%BAZA;

A[0]=i-1;
}

void inmultire_doi(int A[])
{
int i,t=0;

for (i=1;i<=A[0] || t;++i,t/=BAZA)
      A[i]=(t+=A[i]*2)%BAZA;

A[0]=i-1;
}

void adunare(int A[],int B[],int C[])
{
int i,t=0;
for (i=1;i<=A[0] || i<=B[0] || t;++i,t/=BAZA)
     C[i]=(t+=A[i]+B[i])%BAZA;

C[0]=i-1;
}

void inmultire(int A[],int B[],int C[])
{
int i,t=0;
for (i=1;i<=A[0] || i<=B[0] || t;++i,t/=BAZA)
     C[i]=(t+=A[i]*B[i])%BAZA;

C[0]=i-1;
}

void sub(int A[],int B[])
{
int i,t=0;
for (i=1;i<=A[0];++i)
    A[i]+=(t=(A[i]-=B[i]+t)<0)*BAZA;
for (;A[0]>1 && !A[A[0]];--A[0]);
}

void AtribValue(int A[], unsigned long X)
{
A[0]=0;
while (X)
      {
      ++A[0];
      A[A[0]]=X%BAZA;
      X/=BAZA;
  }
}


int main()
{
int i;
freopen("sarpe.in","rt",stdin);
scanf("%d", &N);
AtribValue(REZ,N);
inmultire_patru(REZ);
AtribValue(REZ1,N);
AtribValue(REZ2,N);
REZ3[1]=1;
REZ4[1]=2;
sub(REZ1,REZ3);
sub(REZ2,REZ4);
inmultire(REZ1,REZ2,REZ5);
inmultire_doi(REZ5);
adunare(REZ,REZ5,REZ6);
freopen("sarpe.out","wt",stdout);
printf("%d", REZ6[REZ6[0]]);
for (i=REZ6[0]-1;i;--i)
     printf("%04d", REZ6[i]);
return 0;
}