Cod sursa(job #2292316)

Utilizator Y.MalmsteenB.P.M. Y.Malmsteen Data 29 noiembrie 2018 13:10:54
Problema Dreptunghiuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>

using namespace std;

const int MAXN = 400;

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

int rad[MAXN * MAXN + 1];

int main()
{
    int n, m;
    f >> n >> m;
    for(int i = 1; i <= MAXN; ++i)
        rad[i * i] = i;
    long long nrSol = 0;
    for(int H = 1; H < n; H++)
        for(int W = 1; W < m; W++)
        {
            int nr = 1;
            for(int A = 1; A < H; A++)
            {
                int delta = W * W - 4 * A * (H - A);
                if(delta == 0 && W % 2 == 0)
                    nr++;
                else
                    if(delta > 0 && rad[delta] != 0)
                    {
                        if((W + rad[delta]) % 2 == 0 && W - rad[delta] > 0)
                            nr++;
                        if((W - rad[delta]) % 2 == 0 && W - rad[delta] >= 2)
                            nr++;
                    }
            }
            nrSol += 1LL * nr * (n - H) * (m - W);
        }
    g << nrSol;
    f.close();
    g.close();
    return 0;
}