Pagini recente » Cod sursa (job #2734433) | Cod sursa (job #1907540) | Cod sursa (job #999098) | Cod sursa (job #407218) | Cod sursa (job #4850)
Cod sursa(job #4850)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int NMAX = 401;
const int NMAX2 = NMAX * NMAX;
int N, M;
int SQ[NMAX2];
long long cnt;
void read() {
FILE *fin = fopen("dreptunghiuri.in", "rt");
fscanf(fin, " %d %d", &N, &M);
if (M > N) swap(N, M);
fclose(fin);
}
void prepare() {
int i;
memset(SQ, 0xff, sizeof(SQ));
for (i = 0; i < NMAX; ++i)
SQ[i * i] = i;
}
void count() {
int i, j, k, p;
int c, d, r;
bool ok;
for (i = 1; i < N; ++i)
for (j = 1; j < M; ++j) {
for (k = p = 1; k < i; ++k) {
ok = true;
c = k * (i - k);
d = j * j - 4 * c;
r = -1;
if (d < 0)
ok = false;
else
r = SQ[d];
if (r < 0) ok = false;
if ((j + r) & 1)
ok = false;
if (r > j) ok = false;
if (ok)
++p;
// printf("%d %d %d %lld\n", i, j, k, cnt);
}
cnt += p * (N - i) * (M - j);
}
}
void afisare() {
FILE *fout = fopen("dreptunghiuri.out", "wt");
fprintf(fout, "%lld\n", cnt);
fclose(fout);
}
int main() {
read();
prepare();
count();
afisare();
return 0;
}