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)); }