Cod sursa(job #316367)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 19 mai 2009 13:14:24
Problema Sarpe Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.01 kb
#include <cstdio>   
#include <cstring>   
  
#define file_in "sarpe.in"   
#define file_out "sarpe.out"   
  
#define BASE 10   
#define Nmax 10001   
  
int a[Nmax],b[Nmax],c1[Nmax],a1[Nmax],c[Nmax],rez[Nmax],cc[Nmax],b1[Nmax];   
  
inline void ADD1(int A[],int B[])         
{         
    long long i, t = 0;         
    for (i = 1; i <= A[0]|| i<=B[0] || t; ++i, t /= BASE)         
        A[i] = (t += A[i] +B[i]) % BASE;         
    A[0] = i - 1;         
}         
  
inline 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) * BASE;   
    while (A[0] && !A[A[0]]) --A[0];   
}   
  

void citire()         
{         
    int i,l,p;         
    char s[Nmax];         
        
    scanf("%s", s);         
    l = strlen(s);         
    for (i = 1; i <= l; i++)         
    {         
        ++a[0];         
        //for (j = 8; j >= 0; --j)         
            if (l - i>= 0)         
                a[a[0]] = a[a[0]] * 10 + s[l - i] - '0';        
           
    }         
}         
  
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 ADD(int A[], int B[], int C[])      
{      
    int i, t = 0;      
    for (i = 1; i <= A[0] || i <= B[0] || t; ++i, t /= BASE)      
        C[i] = (t += A[i] + B[i]) % BASE;      
    C[0] = i - 1;      
}      
  
inline void ADD2(int A[], int B[])      
{      
    int i, t = 0;      
    for (i = 1; i <= A[0] || i<=B[0] || t; ++i, t /= BASE)      
        A[i] = (t += A[i]+B[i]) % BASE;      
    A[0] = i - 1;      
}      
  
inline void div(int A[], int B)      
{      
      int i, t = 0;      
      for (i = A[0]; i > 0; i--, t %= B)      
              A[i] = (t = t * 10 + A[i]) / B;      
      for (; A[0] > 1 && !A[A[0]]; A[0]--);      
}     
  
void scrie(int a[])      
{      
    int i;      
     
    //printf("%d", a[a[0]]);      
    for (i = a[0]; i >= 1; --i)      
        printf("%d", a[i]);      
    printf("\n");      
}       
  
  
int main()   
{   
    freopen(file_in,"r",stdin);   
    freopen(file_out,"w",stdout);   
       
    citire();   
    memcpy(a1,a,sizeof(a1));
	memcpy(b1,a,sizeof(b1));
	
	rez[0]=1;
	rez[1]=4;
	MUL(a,rez,c);
	/*memcpy(a1,a,sizeof(a1));
	memcpy(b1,a,sizeof(b1));
	*/
	rez[0]=1;
	rez[1]=1;
	SUB(a1,rez);
	rez[0]=1;
	rez[1]=2;
	SUB(b1,rez);
	MUL(a1,b1,c1);
	rez[0]=1;
	rez[1]=2;
	MUL(c1,rez,b);
	ADD(c,b,cc);
	scrie(cc);
  
       
    fclose(stdin);   
    fclose(stdout);   
       
    return 0;   
}