Cod sursa(job #2282591)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 14 noiembrie 2018 09:47:30
Problema Dreptunghiuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <bits/stdc++.h>
using namespace std;
int n,m,usu[1000003];
long long sol;
ifstream f ("dreptunghiuri.in");
ofstream g ("dreptunghiuri.out");
int calc(int i,int j)
{
	int rez=0,t,x;
	for(int k=1;k<j;++k)
	{
		t=i*i-4*k*(j-k);
		if(t<0) continue;
		t=usu[t];
		if(t>=0&&((i+t)&1)==0)
		{
			x=(i+t)>>1;
			if(x>0&&x<i) ++rez;
			if(!t) continue;
			x=(i-t)>>1;
			if (x>0&&x<i) ++rez;
		}
	}
	return rez;
}
int main()
{
	f>>n>>m;
	sol=1ll*n*(n-1)*m*(m-1)/4;
	memset(usu,-1,sizeof(usu));
	for(int i=0;i*i<1000000;++i) usu[i*i]=i;
	for(int i=2;i<n;++i)
    {
        for(int j=2;j<m;++j) sol+=1ll*calc(i,j)*(n-i)*(m-j);
    }
	g<<sol;
	return 0;
}