Cod sursa(job #2064215)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 11 noiembrie 2017 23:25:30
Problema Dreptunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<bits/stdc++.h>
#define maxN 405
using namespace std;
int n,m,a,b,c,delta;
int dp[maxN][maxN];
long long sol;
int ps[maxN];
int main()
{
    freopen("dreptunghiuri.in","r",stdin);
    freopen("dreptunghiuri.out","w",stdout);

    scanf("%d%d",&n,&m);
    for(int i=1;(i*i)<=400;i++) ps[i*i]=i;
    for(int L=1;L<n;L++)
        for(int l=1;l<m;l++)
    {
        int ans=0;
        for(int k=0;k<L;k++)
        {

            a=2;
            b=-2*l;
            c=-2*k*k+2*L*k;
            delta=b*b-4*a*c;
            if(delta<0) continue;

            if(delta==0)
            {
                int x=-b/(2*a);
                if(!(b%(2*a)) && x<l) ans++;
            }
                else
            if(delta>0)
            {
                int rp=ps[delta];
                if(!rp) continue;
                float x1=(-b-rp)/(2.0*a);
                float x2=(-b+rp)/(2.0*a);
                if(x1==(int)x1 && x1<l) ans++;
                if(x2==(int)x2 && x2<l) ans++;
            }
        }
        sol=sol+1LL*(n-L)*(m-l)*ans;
    }
    printf("%lld\n",sol);
    return 0;
}