http://community.topcoder.com/stat?c=problem_statement&pm=11604&rd=14547
いつも通りどれかを決め打ちして計算する。AとBを決めて、近い値を探す。
よく見たら解くの2度目だった。
lli f(lli a, lli b, lli c)
{
lli ret = a + b + c;
for (lli A = 1; A <= (c + ret) / A; ++A) {
for (int d = -1; d <= +1; ++d) {
// lli B = (c + ret) / A + d;
lli B = c / A + d;
lli C = A * B;
if (0 < A && 0 < B && 0 < C) {
lli diff = labs(A - a) + labs(B - b) + labs(C - c);
ret = min(ret, diff);
}
}
}
return ret;
}
class CorrectMultiplication {
public:
long long getMinimum(int a, int b, int c)
{
return min(f(a, b, c), f(b, a, c));
}