Cod sursa(job #1076317)

Utilizator teoionescuIonescu Teodor teoionescu Data 10 ianuarie 2014 01:03:17
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include<fstream>
#include<cstring>
#define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b)
#define ll unsigned long long
using namespace std;
ifstream in("tort.in");
ofstream out("tort.out");
const int Lmax = 50;
void eq(int X[],int Y[]){
    for(int i=0;i<=Y[0];i++) X[i]=Y[i];
}
void sum(int X[],int Y[]){
    int t=0;
    X[0]=max(X[0],Y[0]);
    for(int i=1;i<=X[0];i++){
        int aux=(X[i]+Y[i]+t);
        X[i]=aux%10;
        t=aux/10;
    }
    if(t) X[++X[0]]=t;
}
void prod(int X[],int p){
    int t=0;
    for(int i=1;i<=X[0];i++){
        int aux=X[i]*p+t;
        X[i]=aux%10;
        t=aux/10;
    }
    if(t) X[++X[0]]=t;
}
void movi(int X[],int m){
    int T[Lmax];
    memset(T,0,sizeof(T));
    T[0]=m;
    for(int i=1;i<=X[0];i++) T[++T[0]]=X[i];
    for(int i=0;i<=T[0];i++) X[i]=T[i];
}
void Prod(int X[],int Y[]){
    int T[Lmax][Lmax];
    memset(T,0,sizeof(T));
    for(int i=1;i<=X[0];i++){
        eq(T[i],Y);
        prod(T[i],X[i]);
        movi(T[i],i-1);
        sum(T[0],T[i]);
    }
    for(int i=0;i<=T[0][0];i++) X[i]=T[0][i];
}
int A[Lmax],B[Lmax],C[Lmax];
int AS[Lmax],BS[Lmax],CS[Lmax];
int S[Lmax],SS[Lmax];
int main(){
    ll a,b;
    in>>a>>b;
    //out<< (  (a+1)*(a+2)/2 * (b+1)   +  b*(b+1)/2 * (a+1)  )<<'\n';
    ll x,xx,xxx;
    ll y,yy,yyy;
    x=a+1;
    xx=a+2;
    xxx=b+1;
    y=b;
    yy=b+1;
    yyy=a+1;
    if(x%2==0) x/=2;
    if(xx%2==0) xx/=2;
    if(y%2==0) y/=2;
    if(yy%2==0) yy/=2;
    while(x) A[++A[0]]=x%10,x/=10;
    while(xx) B[++B[0]]=xx%10,xx/=10;
    while(xxx) C[++C[0]]=xxx%10,xxx/=10;
    while(y) AS[++AS[0]]=y%10,y/=10;
    while(yy) BS[++BS[0]]=yy%10,yy/=10;
    while(yyy) CS[++CS[0]]=yyy%10,yyy/=10;
    eq(S,A);
    Prod(S,B);
    Prod(S,C);
    eq(SS,AS);
    Prod(SS,BS);
    Prod(SS,CS);
    sum(S,SS);
    for(int i=S[0];i>=1;i--) out<<S[i];
    return 0;
}