yukicoder #358 も~っと!門松列

問題

No.358 も~っと!門松列 - yukicoder

解答

Aが門松列であれば、大きなpで抑えられるのでINFとなる。 Aが門松列でない場合、1\le p \le max(A)をすべて試せば良い。

bool is_kado(std::vector<int> const& A) {
  if (A.size() != 3) { return false; }
  return A[0] != A[2] &&
    ((A[1] > A[0] && A[1] > A[2]) ||
     (A[1] < A[0] && A[1] < A[2]));
}

int main() {

  std::vector<int> A(3); cin >> A;
  if (is_kado(A)) {
    std::cout << "INF\n";
    return 0;
  }

  int ans = 0;
  for (int p = 1; p < 1001; p++) {
    vector<int> B;
    rep(i, 3)
      B.push_back(A[i] % p);
    if (is_kado(B)) {
      ans++;
    }
  }

  std::cout << ans << "\n";
}