소스 ¶
~cpp
#include <iostream>
#include <Windows.h>
#include <math.h>
using namespace std;
POINT GetTrianglePoint(int houseNumber)
{
POINT trianglePoint;
trianglePoint.x = 0; trianglePoint.y = 0;
for (; trianglePoint.y * trianglePoint.y <= houseNumber; ++trianglePoint.y);
--trianglePoint.y;
houseNumber -= trianglePoint.y * trianglePoint.y;
for (trianglePoint.x = trianglePoint.y * (-1); 0 < houseNumber; ++trianglePoint.x)
{
--houseNumber;
}
return trianglePoint;
}
double GetHousePointX(POINT trianglePoint)
{
return trianglePoint.x * 0.5;
}
double GetHousePointY(POINT trianglePoint)
{
if ((0 == abs(trianglePoint.y) % 2 && 0 == abs(trianglePoint.x) % 2) ||
(1 == abs(trianglePoint.y) % 2 && 1 == abs(trianglePoint.x) % 2))
{
return trianglePoint.y * (sqrt(3.0) / 2);
}
else
{
return ((trianglePoint.y - 1) * (sqrt(3.0) / 2)) + (sqrt(3.0) / 3);
}
}
double GetHouseDistance(POINT trianglePointOne, POINT trianglePointAnother)
{
return sqrt(pow(GetHousePointX(trianglePointOne) - GetHousePointX(trianglePointAnother), 2) +
pow(GetHousePointY(trianglePointOne) - GetHousePointY(trianglePointAnother), 2));
}
void main()
{
int houseNumberOne;
int houseNumberAnother;
while ( cin >> houseNumberOne >> houseNumberAnother)
{
printf("%.3f\n", GetHouseDistance(GetTrianglePoint(houseNumberOne), GetTrianglePoint(houseNumberAnother)));
}
}