Cod sursa(job #1173926)

Utilizator enedumitruene dumitru enedumitru Data 21 aprilie 2014 11:20:06
Problema Dreptunghiuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include<fstream>
#include<cmath>
using namespace std;
ifstream f("dreptunghiuri.in"); ofstream g("dreptunghiuri.out");
int m,n,w,h,a,b,r,x,y,p,i,rad[160001];
long long nr;
int main()
{	f>>m>>n; 
	if(m>n) m^=n^=m^=n;
	for(i=1;i<=160000;i++) rad[i]=(int)sqrt((double)i);
	for(h=1;h<m;h++)
		for(w=1;w<n;w++)
		{	p=(m-h)*(n-w);
			nr+=p;
			for(a=1;a<=h;a++)
			{	b=h-a;
				r=w*w-4*a*b;
				if(r>0)
				{	y=rad[r];
					if(y*y==r)
					{	x=w-y;
						if(!(x&1) && x>0) nr+=p;
						x=w+y;
						if(!(x&1) && x/2<w) nr+=p;
					}
				}
				if(!r && !(w&1)) nr+=p;
			}
		}
	g<<nr<<'\n'; g.close(); return 0;
}