Cod sursa(job #470207)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 12 iulie 2010 11:49:31
Problema Dreptunghiuri Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cmath>

using namespace std;

#define file_in "dreptunghiuri.in"
#define file_out "dreptunghiuri.out"

#define nmax 404

int n,m;
int Sqrt[nmax*nmax];


void citire()
{
    freopen(file_in,"r",stdin);
    freopen(file_out,"w",stdout);

    scanf("%d %d", &n, &m);


}

long long numara(int h, int w)
{
    int i,delta;
    long long ans=0;
    long long x=(n-h+1)*(m-w+1);

    for (i=2;i<h;++i)
    {
        delta=(w-1)*(w-1)-4*(h-i)*(i-1);
        if (Sqrt[delta] && delta>=0)
        {
            if ((w-1)*(w-1)==4*(h-i)*(i-1))//o singura solutie
                ans++;
            else
                ans+=2;//2 solutii
        }
    }

    return (ans*x);

}

void solve()
{
    int i,j;
    long long ans;
     for (i=0;i<=400;++i)
          Sqrt[i*i]=1;

     ans=0;
     for (i=3;i<=n;++i)
           for (j=3;j<=m;++j)
                 ans+=numara(i,j);
     printf("%lld\n", ans+(long long)n*(long long)(n-1)*(long long)m*(long long)(m-1)/4);
}

int main()
{
    citire();
    solve();

    fclose(stdin);
    fclose(stdout);

    return 0;
}