Cod sursa(job #878513)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 14 februarie 2013 15:33:14
Problema Dreptunghiuri Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.17 kb

#include <cstdio>
#include <cmath>
#include <fstream>

using namespace std;

int n,m,R[160001];
long long SOL;

void READ ()
{

    ifstream in ("dreptunghiuri.in");

    in>>n>>m;

}

void SOLVE ()
{


    for( int i=1 ; i <= n ; ++i )
        R[i*i]=i;

    int S,B,C,X1,X2,D;
    for( int i=1 ; i <= n ; ++i )
        for( int j=1 ; j <= m ; ++j )
        {
            S=0;
            for( int k=0 ; k < i ; ++k )
            {
                B=-j;
                C=k*(i-k);
                D=B*B-4*C;
                if( D < 0 || ( D && !R[D] ) )
                    continue;
                X1=(-B+R[D]);
                X2=(-B-R[D]);
                if( X1&1 )
                    continue;
                X1>>=1;
                X2>>=1;
                if( 0 <= X1 && X1 < j )
                    ++S;
                if( 0 <= X2 && X2 < j && X1 != X2 )
                    ++S;
            }
            SOL+=(1LL*(n-i)*(m-j)*S);
        }

}

void OUT ()
{

    freopen ("dreptunghiuri.out","w",stdout);

    printf("%lld\n",SOL);

}

int main ()
{

    READ ();
    SOLVE ();
    OUT ();

    return 0;

}