Cod sursa(job #547717)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 6 martie 2011 17:33:24
Problema Dreptunghiuri Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#include <math.h>

int n, m;
long long sol;

int main ()
{
	freopen ("dreptunghiuri.in", "r", stdin);
	freopen ("dreptunghiuri.out", "w", stdout);
	
	scanf ("%d %d", &n, &m);
	
	if (n < m)
		n ^= m ^= n ^= m;
	
	int i, j, k, nr, d;
	
	for (i = 2; i < n; i ++)
		for (j = 2; j < m; j ++)
		{
			nr = 0;
			for (k = 1; k < j; k ++)
			{
				d = i * i - 4 * k * (j - k);
				
				if (d < 0)
					continue;
				
				if (d == 0)
				{
					if ((int)sqrt (d) * sqrt (d) != d)
						continue;
					nr += (i & 1) == 0;
					continue;
				}
				
				if ((int)sqrt (d) * sqrt (d) != d)
					continue;
				d = sqrt (d);
				
				if ((i ^ d) & 1)
					continue;
				if (d >= i)
					continue;
				nr += 2;
			}
			sol = sol + nr * (n - i) * (m - j);
		}
	
	sol = sol + (long long)n * (n - 1) / 2 * m * (m - 1) / 2;
	printf ("%lld\n", sol);
	
	return 0;
}