Cod sursa(job #2300277)

Utilizator AndreiVisoiuAndrei Visoiu AndreiVisoiu Data 11 decembrie 2018 08:41:00
Problema Dreptunghiuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>
using namespace std;

const int MAXN = 400;

int rad[MAXN*MAXN + 1];

int main()
{
    freopen("dreptunghiuri.in", "r", stdin);
    freopen("dreptunghiuri.out", "w", stdout);
    int m, n;
    scanf("%i %i", &m, &n);

    for(int i = 1; i <= MAXN; i++)
        rad[i * i] = i;
    long long nrS = 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) && (W+rad[delta])%2 == 0 && W > rad[delta]) nr += 2;
            }
            nrS += (long long)nr * (n-H) * (m-W);
        }
    printf("%lld", nrS);
    return 0;
}