Cod sursa(job #2293104)

Utilizator nurof3nCioc Alex Andrei nurof3n Data 30 noiembrie 2018 15:49:46
Problema Dreptunghiuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>

using namespace std;

const int MAXN = 400;

ifstream in("dreptunghiuri.in");
ofstream out("dreptunghiuri.out");

int rad[MAXN * MAXN + 1];
int N, M;

int main()
{
	in >> N >> M;

	for (int i = 1; i <= MAXN; i++)
		rad[i * i] = i;

	long long nrsol = 0;
	for (int l1 = 1; l1 < N; l1++)
		for (int l2 = 1; l2 < M; l2++)
		{
			int nr = 1;
			for (int A = 1; A < l1; A++)
			{
				int delta = l1 * l1 - 4 * A * (l2 - A);
				if (delta == 0 && l1 % 2 == 0)
					nr++;
				else
					if (delta > 0 && rad[delta])
					{
						if ((l1 + rad[delta]) % 2 == 0 && l1 - rad[delta] > 0)
							nr++;
						if ((l1 - rad[delta]) % 2 == 0 && l1 - rad[delta] >= 2)
							nr++;
					}
			}
			nrsol += 1LL * nr * (N - l2) * (M - l1);
		}
	out << nrsol;
	
	return 0;
}