Cod sursa(job #545074)

Utilizator raduzerRadu Zernoveanu raduzer Data 2 martie 2011 17:49:17
Problema Dreptunghiuri Scor 0
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.68 kb
#include <cstdio>
#include <cmath>

int n, m;
long long sol;

int main()
{
	int i, j, k;
	freopen("dreptunghiuri.in", "r", stdin);
	freopen("dreptunghiuri.out", "w", stdout);

	scanf("%d %d", &n, &m);

	for (i = 2; i < n; ++i)
		for (j = 2; j < m; ++j)
		{
			int ret = 0;

			for (k = 1; k < j; ++k)
			{
				int D = i * i - 4 * k * (j - k);

				if (D < 0)
					continue;

				D = (int)sqrt(D);

				if (D < 0 || ((D + i) % 2))
					continue;

				int s1 = (i + D) / 2;
				int s2 = (i - D) / 2;

				if (s1 > 0 && s1 < i)
					++ret;
				if (D && s2 > 0 && s2 < i)
					++ret;
			}

			sol += 1LL * ret * (n - i) * (m - j);
		}

	printf("%lld\n", sol + 1LL * n * (n - 1) * m * (m - 1) / 4);
}