Cod sursa(job #1494865)

Utilizator akaprosAna Kapros akapros Data 1 octombrie 2015 22:20:17
Problema Dreptunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxN 402
using namespace std;
int n, m, i, j, Sqrt[maxN * maxN];
long long sol;
void read()
{
    freopen("dreptunghiuri.in", "r", stdin);
    scanf("%d %d", &n, &m);
}
long long nrr(int x, int y)
{
    int i, delta;
    long long ans = 0;
    for (i = 1; i < n; ++ i)
    {
        delta = y * y - 4 * i * (x - i);
        if (delta >= 0 && (Sqrt[delta] || !delta))
        {
            delta = Sqrt[delta];
            if ((y + delta) % 2 == 0 && y + delta > 0 && (y + delta) / 2 <= y)
                ans += (n - x) * (m - y) * 1LL;
            if (delta && (y - delta) % 2 == 0 && y - delta > 0 && (y - delta) / 2 <= y)
                ans += (n - x) * (m - y) * 1LL;
        }
    }
    return ans;
}
void solve()
{
    for (i = 1; i <= n; ++ i)
        Sqrt[i * i] = i;
    for (i = 1; i <= n; ++ i)
        for (j = 1; j <= m; ++ j)
            sol += nrr(i, j);
}
void write()
{
    freopen("dreptunghiuri.out", "w", stdout);
    printf("%lld", &sol);
}
int main()
{
    read();
    solve();
    write();
    return 0;
}