Pagini recente » Cod sursa (job #2972699) | Cod sursa (job #2121871) | Cod sursa (job #45767) | Cod sursa (job #2854621) | Cod sursa (job #1083430)
#include <fstream>
#include <cmath>
#define e 0.000001
using namespace std;
ifstream fin("dreptunghiuri.in");
ofstream fout("dreptunghiuri.out");
int n,m,sum;
long long total;
bool aprox (double x)
{
if (x-int(x) < e || int(x)+1-x < e)
return 1;
return 0;
}
int quadratic_eq (int x, int X, int Y)
{
int sum = 0;
double delta = sqrt(4*x*x - 4*X*x + Y*Y);
if (delta > e)
{
double root = (Y+delta)/2;
if (aprox(root) && 0 <= root && root <= Y)
{
++sum;
}
root = (Y-delta)/2;
if (aprox(root) && 0 <= root && root <= Y)
{
++sum;
}
}
else if (fabs(delta) < e)
{
if (Y%2==0)
++sum;
}
return sum;
}
int main()
{
fin>>n>>m;
for (int X=1; X<n; ++X)
for (int Y=1; Y<m; ++Y)
{
sum = 0;
for (int x=1; x <= X/2; ++x)
{
sum += quadratic_eq (x,X,Y);
}
sum = sum*2 +1;
if (X%2==0)
{
sum -= quadratic_eq(X/2,X,Y);
}
total += (n-X)*(m-Y)*sum;
}
fout<<total;
}