Cod sursa(job #2601356)

Utilizator MiricaMateiMirica Matei MiricaMatei Data 14 aprilie 2020 13:05:12
Problema Dreptunghiuri Scor 100
Compilator cpp-64 Status done
Runda Lista lui wefgef Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 400;

int r[MAXN * MAXN + 5];

int solve(int h, int w, int a) {
  int delta = w * w - 4 * a * (h - a);
  if (delta < 0 || r[delta] == -1)
    return 0;
  int rad = r[delta];
  int ans = 0;
  if (rad < w)
    ans++;
  if (rad <= w && rad != 0)
    ans++;
  return ans;
}

int main() {
  freopen("dreptunghiuri.in", "r", stdin);
  freopen("dreptunghiuri.out", "w", stdout);

  memset(r, -1, sizeof(r));
  for (int i = 0; i <= MAXN; ++i)
    r[i * i] = i;

  int n, m;
  scanf("%d%d", &n, &m);
  long long ans = 0;
  for (int h = 1; h < n; ++h)
    for (int w = 1; w < m; ++w) {
      long long s = 0;
      for (int a = 0; a < h; ++a)
        s += solve(h, w, a);
      ans += s * (n - h) * (m - w);
    }
  printf("%lld\n", ans);

  return 0;
}