解いた問題

6/01/2013

SRM522 Div1 Medium

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