Cod sursa(job #1245614)

Utilizator acomAndrei Comaneci acom Data 19 octombrie 2014 18:07:11
Problema Dreptunghiuri Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<cstdio>
using namespace std;
int n,m,nr,delta,radical[160005];
long long sol;
int main()
{
    int i,h,w,a;
    freopen("dreptunghiuri.in","r",stdin);
    freopen("dreptunghiuri.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (i=1;i<=400;++i)
        radical[i*i]=i;
    for (h=1;h<n;++h)
        for (w=1;w<m;++w)
        {
            nr=0;
            for (a=0;a<h;++a)
            {
                delta=w*w-4*a*(h-a);
                if (delta<0) continue;
                if (!delta)
                {
                    if (!(w&1)) ++nr;
                    continue;
                }
                if (!radical[delta]) continue;
                delta=radical[delta];
                if (w>=delta && (w+delta)%2==0)
                    ++nr;
                if (delta<w && (w+delta)%2==0)
                    ++nr;
            }
            sol+=1LL*nr*(n-h)*(m-w);
        }
    printf("%d\n",sol);
    return 0;
}