Cod sursa(job #730692)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 6 aprilie 2012 19:10:57
Problema Dreptunghiuri Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.91 kb
#include<iostream>
#include<fstream>
#include<math.h>
using namespace std;

ifstream in("dreptunghiuri.in");
ofstream out("dreptunghiuri.out");

int n,m,rad[160100],nr,sol,de,a,b,c;
long long rez;

int main() {
	int i,j,k;
	
	in >> n >> m;
	
	for(i = 0; i<=n*n; ++i) {
		rad[i] = (double) sqrt((double)i);
	
		if(rad[i]*rad[i] != i)
			rad[i] = -1;
	}
	
	for(i = 1; i != n; ++i)
		for(j = 1; j != m; ++j) {
			nr = 1;
			
			for(k = 1; k!=j; ++k) {
				a = 1; b = -i; c = k*(j-k);
				
				de = b*b - 4*a*c;
				
				if(de>=0 && rad[de]!=-1) {
					sol = - b - rad[de];
					
					if(!(sol % (2*a)) && sol/2*a >= 1 && sol/2*a < i)
						++nr;
					
					if(de!=0) {
						sol = -b + rad[de];
						
						if(!(sol % (2*a)) && sol/2*a >= 1 && sol/2*a < i)
							++nr;
					}
				}
			}
			
			rez += (long long) nr*(n - i)*(m - j);
		}
	
	out << rez << "\n";
	
	return 0;
}