Pagini recente » Cod sursa (job #1155703) | Cod sursa (job #2591777) | Cod sursa (job #1502530) | Cod sursa (job #40481) | Cod sursa (job #612032)
Cod sursa(job #612032)
#include <fstream>
using namespace std;
ifstream in("dreptunghiuri.in");
ofstream out("dreptunghiuri.out");
int M, N;
long long cnt = 0;
short int sqrt[1 << 20];
int cnt_sol(const int &H, const int &W) {
int sol = 1, C1, C2;
for(int A = 1; A < H; ++A) {
int delta = W * W - 4 * A * (H - A);
if(delta < 0 || (delta > 0 && !sqrt[delta]))
continue;
if(!delta)
sol += (W / 2 > 0 && W / 2 < W && W % 2 == 0);
else {
C1 = W + sqrt[delta];
C2 = W - sqrt[delta];
sol += (C1 / 2 > 0 && C1 / 2 < W && (C1 % 2 == 0)) + (C2 / 2 > 0 && C2 / 2 < W && (C2 % 2 == 0));
}
}
return sol;
}
void solve() {
for(int i = 1; i <= 1000; ++i)
sqrt[i * i] = i;
for(int i = 2; i <= M; ++i)
for(int j = 2; j <= N; ++j)
cnt += (long long)(M - i + 1) * (N - j + 1) * cnt_sol(i - 1, j - 1);
}
int main() {
in >> M >> N;
solve();
out << cnt;
return 0;
}