Cod sursa(job #130944)

Utilizator c_sebiSebastian Crisan c_sebi Data 2 februarie 2008 17:23:54
Problema Dreptunghiuri Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream.h>
#include <math.h>

using namespace std;

int nl, nc;

int solve(int h, int w, int a){
	int F=0;
	double d, c1, c2;
	if(w*w-4*a*(h-a)>=0) {
		d = sqrt(w*w-4*a*(h-a));
		c1=(w+d)/2.;
		c2=(w-d)/2.;
		if(c1==c2)
			if(c1==floor(c1) && c1<w && c1>=0)
				F=1;
			else F=0;
		else {
			if(c1==floor(c1) && 0<=c1 && c1<w)
				F++;
			if(c2==floor(c2) && 0<=c2 && c2<w)
				F++;
		}
	}
	else F=0;
	return F;
}


int main(){
	int i, j, a, SOL=0, nr;
	ifstream f("dreptunghiuri.in");
	ofstream g("dreptunghiuri.out");
	f>>nl>>nc;
	for(i=1; i<nl; i++) {
		nr = 0;
		for(j=i+1; j<nc; j++)
			for(a=0; a<i; a++)
				nr+= 2*(nl-i)*(nc-j)*solve(i, j, a);
		SOL += nr;
		for(a=0; a<i; a++)
			SOL += (nl-i)*(nc-i)*solve(i, i, a);
	}
	g<<SOL<<endl;
	f.close();
	g.close();
	return 0;
}