Cod sursa(job #547499)

Utilizator raduzerRadu Zernoveanu raduzer Data 6 martie 2011 13:38:23
Problema Dreptunghiuri Scor 80
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.75 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;

				int rD = (int)sqrt(D);

				if (rD * rD != D)
					D = -1;
				else
					D = rD;

				if (D < 0 || ((D + i) & 1))
					continue;

				int s1 = (i + D) >> 1;
				int s2 = (i - D) >> 1;

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

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

	sol += 1LL * n * (n - 1) * m * (m - 1) / 4;

	printf("%lld\n", sol);
}