michimani.net

AtCoder Beginner Contest 144 #ABC144

2023-12-22

AtCoder Beginner Contest 144 の A/B/C 問題の解法。

実装はこちら atcoder/abc/101-200/144 · michimani/atcoder

A - 9x9

A - 9x9

特筆する点はなし。入力値は整数なので \(0 \lt A \lt 10, 0 \lt B \lt 10\) の場合にその積を出力して終了。それ以外は \(-1\) を出力して終了。

#include <iostream>

using namespace std;

int main()
{
  int a, b;
  cin >> a >> b;

  if (a > 0 && a < 10 && b > 0 && b < 10)
  {
    cout << a * b << endl;
    return 0;
  }

  cout << "-1" << endl;
  return 0;
}

提出 #48710911 - AtCoder Beginner Contest 144

B - 81

B - 81

\(N\) が \(1 \leq i \leq 9\) となる各 \(i\) で割り切れるかを順に判定し、商が \(9\) 以下である場合は Yes を出力して終了。条件を満たす \(i\) がなかった場合は No を出力して終了。

#include <iostream>

using namespace std;

int main()
{
  int n;
  cin >> n;

  for (int i = 1; i <= 9; i++)
  {
    if (n % i == 0 && n / i <= 9)
    {
      cout << "Yes" << endl;
      return 0;
    }
  }

  cout << "No" << endl;
  return 0;
}

提出 #48710870 - AtCoder Beginner Contest 144

C - Walk on Multiplication Table

C - Walk on Multiplication Table

\(N\) が \(1 \leq i \leq \sqrt{N} \) となる各 \(i\) で割り切れるかどうかを順に判定し、割り切れる場合は \(i + \frac{N}{i} - 2\) を計算して仮の答えとする。\(-2\) しているのは、表の現在地が \((1,1)\) であることを考慮しているため。

条件を満たす \(i\) が見つかるたびに現在の仮の答えと比較して小さい方の値で更新し、最終的な答えとして出力する。

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
  unsigned long long n;
  cin >> n;

  unsigned long long ans = 0;

  for (unsigned long long i = 1; i <= (unsigned long long)(sqrt(n)); i++)
  {
    if (n % i != 0)
    {
      continue;
    }

    if (ans == 0)
    {
      ans = i + n / i - 2;
    }
    else
    {
      ans = min(ans, i + n / i - 2);
    }
  }

  cout << ans << endl;
  return 0;
}

提出 #48710791 - AtCoder Beginner Contest 144


comments powered by Disqus