Cod sursa(job #1506837)

Utilizator mariusn01Marius Nicoli mariusn01 Data 21 octombrie 2015 00:20:56
Problema Dreptunghiuri Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.65 kb
#include <fstream>
#define DIM 402
#include <cmath>
 
using namespace std;
ifstream fin("dreptunghiuri.in");
ofstream fout("dreptunghiuri.out");
 
double rd;
int n, m, i, j, L, C, rad, H, delta, x;
long long sol;
 
int D[DIM][DIM];
 
int p[DIM*DIM];
 
int main () {
    fin>>n>>m;
    n--;
    m--;
 
    for (i=0;i<DIM;i++)
        p[i*i] = i;
 
    for (L=1;L<=n;L++)
        for (C=1;C<=m;C++) {
 
            for (H=1; H<L; H++) {
                delta = C*C - 4 * L*H  + 4 * H*H;
 
                if (delta < 0)
                    continue;
 
//                rd = sqrt(delta);
 
                if (p[delta]*p[delta] != delta) {
                    continue;
                }
                rad = p[delta];
/*
                if (rd != (int)rd)
                    continue;
 
                rad = (int)rd;
*/
 
                if (rad == 0) {
                    if (C % 2 == 0) {
                        if (C/2 >= 1 && C/2 <C)
                            D[L][C]++;
                    }
 
                } else {
                    if ((C - rad) % 2 == 0) {
                        x = (C-rad)/2;
                        if (x >= 1 && x < C)
                            D[L][C]++;
                    }
 
                    if ((C + rad) % 2 == 0) {
                        x = (C+rad)/2;
                        if (x >= 1 && x < C)
                            D[L][C]++;
                    }
                }
 
            }
            D[L][C] ++;
 
        }
 
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            sol+=1LL*D[i][j]*(n-i+1)*(m-j+1);
    fout<<sol;
 
    return 0;
}