Pagini recente » Utilizatori inregistrati la Infoarena Monthly 2014 - Runda 1 | Cod sursa (job #2213180) | Cod sursa (job #2738838) | Cod sursa (job #1181455) | Cod sursa (job #2550799)
#include <fstream>
#define input "dreptunghiuri.in"
#define output "dreptunghiuri.out"
using namespace std;
typedef long long ll;
ifstream in(input);
ofstream out(output);
int N, M;
void Read_Data()
{
in >> N >> M;
}
double SQRT(double n)
{
if(!n) return 0;
double sol = n / 2;
for(int i = 1; i <= 20; i++)
sol = sol - (sol * sol - n) / (2 * sol);
return sol;
}
ll Get_Comb(int I, int J)
{
ll sol = 0;
for(int A = 1; A <= I; A++)
{
int a = 1, b = -J, c = A * (I - A);
int delta = b * b - 4 * a * c;
if(delta > 0)
{
double sol_d = SQRT(delta);
double X1 = (double)(-b + sol_d) / (2 * a);
double X2 = (double)(-b - sol_d) / (2 * a);
if(X1 >= 1 && X1 <= J && X1 == (int)X1)
{
sol++;
//out << (double)X1 << "\n";
}
if(X2 >= 1 && X2 <= J && X2 == (int)X2)
{
sol++;
//out << (double)X2 << "\n";
}
}
else if(delta == 0)
{
double X = -b / a;
if(X >= 1 && X <= J && X == (int)X)
{
sol++;
//out << (double)X << "\n";
}
}
}
return sol;
}
void Solve()
{
ll sol = 0;
for(int i = 1; i < N; i++)
for(int j = 1; j < M; j++)
{
sol = sol + Get_Comb(i, j) * (N - i) * (M - j);
}
out << sol << "\n";
}
int main()
{
Read_Data();
Solve();
return 0;
}