Pagini recente » Cod sursa (job #880806) | Cod sursa (job #1369533) | Cod sursa (job #3149719) | Cod sursa (job #334004) | Cod sursa (job #1110100)
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin ("dreptunghiuri.in");
ofstream fout ("dreptunghiuri.out");
int N; int M;long long sol = 0; int sq[405 * 405];
int compute(int H, int W) {
int count1 = 0;
for(int A = 0 ; A < H; ++A) {
//C ^ 2 - WC + A (H - A) = 0
int delta = W * W - 4 * A * (H - A);
if(delta < 0) continue;
if(delta == 0) {
count1 = count1 + (W % 2 == 0);
} else {
if(sq[delta] == 0) continue;
int sol1 = (W + sq[delta]) / 2;
int sol2 = (W - sq[delta]) / 2;
if((W + sq[delta]) % 2 == 0 && 1 <= sol1 && sol1 <= W)
count1++;
if((W - sq[delta]) % 2 == 0 && 1 <= sol2 && sol2 <= W)
count1++;
}
}
return count1;
}
int main() {
fin >> N >> M;
--N; --M;
for(int i = 1; i <= 400; ++i) sq[i * i] = i;
for(int H = 1; H <= N; ++H)
for(int W = 1 ; W <= M; ++W)
sol = 0ll + sol + 1ll * compute(H, W) * (N - H + 1) * (M - W + 1);
fout << sol <<'\n';
return 0;
}