Pagini recente » Cod sursa (job #2415240) | Cod sursa (job #230051) | Cod sursa (job #1240086) | Cod sursa (job #498031) | Cod sursa (job #5063)
Cod sursa(job #5063)
#include <stdio.h>
#include <string.h>
#define PT(X) (X) * (X)
#define NMAX 40//4
int Nr[NMAX][NMAX];
int sqr_t[NMAX * NMAX];
int N, M, A, B, y;
long long Sol;
void process()
{
int i;
for (i = 1; i <= NMAX - 1; i++) sqr_t[i * i] = i;
}
int calculate(int A, int B, int y)
{
int x1, x2;
int Delta = PT(B) - 4 * y * (A - y);
if (Delta < 0) return 0;
if (sqr_t[Delta] || Delta == 0)
{
x1 = (B - sqr_t[Delta])/2*y;
x2 = (B + sqr_t[Delta])/2*y;
if (x1 == x2) return (0 <= x1 && x1 <= B);
else return (0 <= x1 && x1 <= B) + (0 <= x2 && x2 <= B);
}
return 0;
}
int main()
{
freopen("dreptunghiuri.in", "r", stdin);
freopen("dreptunghiuri.out", "w", stdout);
process();
scanf("%d %d", &N, &M); N--; M--;
for (A = 1; A <= N; A++)
for (B = 1; B <= M; B++)
{
if (Nr[A][B] == 0 && Nr[B][A] == 0)
{
for (y = 0; y < A; y++)
Nr[A][B] += calculate(A, B, y);
Nr[B][A] = Nr[A][B];
}
Sol += (long long) Nr[A][B] * (N - A + 1) * (M - B + 1);
}
printf("%lld\n", Sol);
return 0;
}