Cod sursa(job #2550800)

Utilizator dey44andIoja Andrei-Iosif dey44and Data 19 februarie 2020 09:55:49
Problema Dreptunghiuri Scor 60
Compilator cpp-64 Status done
Runda preoni6 Marime 1.65 kb
#include <fstream>

#define input "dreptunghiuri.in"
#define output "dreptunghiuri.out"

using namespace std;
typedef long long ll;

ifstream in(input);
ofstream out(output);

int N, M;

void Read_Data()
{
    in >> N >> M;
}

double SQRT(double n)
{
    if(!n) return 0;
    double sol = n / 2;
    for(int i = 1; i <= 20; i++)
        sol = sol - (sol * sol - n) / (2 * sol);
    return sol;
}

ll Get_Comb(int I, int J)
{
    ll sol = 0;
    for(int A = 1; A <= I; A++)
    {
        int a = 1, b = -J, c = A * (I - A);
        int delta = b * b - 4 * a * c;
        if(delta > 0)
        {
            double sol_d = SQRT(delta);
            double X1 = (double)(-b + sol_d) / (2 * a);
            double X2 = (double)(-b - sol_d) / (2 * a);
            if(X1 >= 1 && X1 <= J && X1 == (int)X1)
                {
                    sol++;
                    //out << (double)X1 << "\n";
                }
            if(X2 >= 1 && X2 <= J && X2 == (int)X2)
                {
                    sol++;
                    //out << (double)X2 << "\n";
                }
        }
        else if(delta == 0)
        {
            double X = -b / a;
            if(X >= 1 && X <= J && X == (int)X)
                {
                    sol++;
                    //out << (double)X << "\n";
                }
        }
    }
    return sol;
}

void Solve()
{
    ll sol = 0;
    for(int i = 1; i < N; i++)
        for(int j = 1; j < M; j++)
        {
            sol = sol + Get_Comb(i, j) * (N - i) * (M - j);
        }
    out << sol << "\n";
}

int main()
{
    Read_Data();
    Solve();
    return 0;
}