Cod sursa(job #2660849)

Utilizator VladTZYVlad Tiganila VladTZY Data 20 octombrie 2020 17:57:08
Problema Dreptunghiuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <string.h>

#define NMAX 170005

using namespace std;

ifstream f("dreptunghiuri.in");
ofstream g("dreptunghiuri.out");

int n, m;
int radacina[NMAX];
long long int answer;
int main()
{
    f >> n >> m;

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

    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            int drept = 1;
            for(int punct = 1; punct < i; punct++)
            {
                int c = punct * i - punct * punct;
                int delta = j * j - 4 * c;

                if(delta >= 0 && radacina[delta] >= 0)
                {
                    int x1 = radacina[delta] + j;
                    int x2 = j - radacina[delta];

                    if(x1 % 2 == 0 && x1 / 2 > 0 && x1 / 2 < j)
                        drept++;
                    if(delta > 0 && x2 % 2 == 0 && x2 / 2 > 0 && x2 / 2 < j)
                        drept++;
                }

            }
            answer = answer + 1ll * (n - i) * (m - j) * drept;
        }
    }


    g << answer;
    return 0;
}