Cod sursa(job #1361888)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 26 februarie 2015 00:55:32
Problema Dreptunghiuri Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.14 kb
#include <fstream>
#define nmax 405
#define maxrad 800000
using namespace std;
ifstream f("dreptunghiuri.in");
ofstream g("dreptunghiuri.out");
int patrat[nmax+5],radical[maxrad+5],ok[maxrad+5];
long long tot=0;
int n,m,sol;

int precalcul(int l,int c)
{
    int nr=0;
    int i,d,p;

    for (i=1;i<c;i++) {
            d=patrat[l]- 4*c*i+ patrat[i]*4;
            if (d<0)
                continue;
            if (ok[d]==1) {
                    if (d>0) {
                        if ((l+radical[d])%2==0)
                            nr+=2;

                    } else
                    if (d==0)
                        if (l%2==0)
                            nr++;

                    }
            }
    return nr+1;

}


int main()
{
    int i,j;

    for (i=0;i<nmax;i++)
        patrat[i]=i*i;
    for (i=0;i*i<maxrad;i++) {
        ok[i*i]=1;
        radical[i*i]=i;
    }


    f>>n>>m;
    n--;m--;
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++) {
            sol=precalcul(i,j);
            tot+=1LL*sol * (n-i+1) * (m-j+1);
        }
    g<<tot;
//    25382614616



    return 0;
}