Cod sursa(job #2292404)

Utilizator lixiLixandru Andrei lixi Data 29 noiembrie 2018 15:00:01
Problema Dreptunghiuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("dreptunghiuri.in");
ofstream g("dreptunghiuri.out");
int n, m, rad[160001];

int main()
{
    f >> n >> m;
    for(int i = 1; i <= 400; i++)
        rad[i * i] = i;
    long long nrsol = 0;
    for(int H = 1; H < n; H++)
        for(int W = 1; W < m; W++)
        {
            int nr = 1;
            for(int A = 1; A < H; A++)
            {
                int delta = W * W - 4 * A * (H - A);
                if(delta==0 && W%2==0)
                    nr++;
                else
                    if(delta>0 && rad[delta]!=0)
                {
                    if((W+rad[delta])%2==0 && W-rad[delta]>0)
                        nr++;
                    if((W-rad[delta])%2==0 && W-rad[delta]>=2)
                        nr++;
                }
            }
            nrsol+=1LL*nr*(n-H)*(m-W);
        }
        g<<nrsol;
    return 0;
}