Cod sursa(job #1139965)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 11 martie 2014 17:23:00
Problema Dreptunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>

using namespace std;

int solve( int H, int W )
{
    int sol = 0;

    for ( int A = 1; A <= H; ++A )
    {
        int delta = W * W - 4 * A * ( H - A );

        if ( delta < 0 )
                continue;

        if ( delta == 0 )
        {
            if ( W % 2 == 0 )
                    sol++;

            continue;
        }

        if ( delta > 0 )
        {
            delta = sqrt( delta );

            if ( ( W + delta ) % 2 == 0 && 1 <= ( W + delta ) / 2 && ( W + delta ) / 2 <= W  )
                    sol++;

            if ( ( W - delta ) % 2 == 0 && 1 <= ( W - delta ) / 2 && ( W - delta ) / 2 <= W  )
                    sol++;
        }
    }

    return sol;
}

int N, M;

int main()
{
    ifstream f("dreptunghiuri.in");
    ofstream g("dreptunghiuri.out");

    f >> N >> M;

    N--;
    M--;

    long long sol = 0;

    for ( int H = 1; H <= N; ++H )
            for ( int W = 1; W <= M; ++W )
                    sol += 1LL * solve( H, W ) * ( N - H + 1 ) * ( M - W + 1 );

    g << sol;

    return 0;
}