AtCoder が提供しているABC(AtCoder Beginner Contest)305 のA問題をC++とPythonで解いてみました。ABC305は、2023年6月10日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
A問題 Water Station(Difficulty : 10)
問題はリンク先をご覧ください。
与えられた整数に一番近い5の倍数を求める問題です。AtCoder Problems による Difficulty は 10 でした。
解答案
C++ プログラム例(ABC305A)
与えられた N に一番近い5の倍数を求めることができれば、それが回答となります。
先に、N 以下の一番近い5の倍数を求めておきます(9行目)。C 言語の割り算が切り捨てになるため、式としては、(N / 5) * 5 で求めることができます。
次に N を5で割った余りが3以上であれば、N より大きな5の倍数が回答になります。これは、入力例1の 53 の出力例1が 55 になることが例となります。条件をそのまま追加の if 文として表現しました(10、11行目)。
以下が、C++プログラムとなります。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int result = n / 5 * 5;
if (n % 5 >= 3) {
result += 5;
}
cout << result << endl;
return 0;
}
給水場の数が21か所と少ないため、全探索で最小値を求めることができます。与えられた N に対して、5 km おきにある給水所との距離を求めて、最小値を回答として出力します。
回答の初期値は最小値を求めるため、十分に大きな数にしています(9行目)。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int result = 200;
for (int i = 0; i <= 100; i += 5) {
if (abs(n - i) < abs(n - result)) {
result = i;
}
}
cout << result << endl;
return 0;
}
どちらも AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC305A)
Python 版は、C++ の先に紹介したプログラムを移植しました。整数の割り算は // を使います。これは多くのプログラミング言語と同じく切り捨てになります。
"""AtCoder Beginner Contest 305 A"""
n = int(input())
result = n // 5 * 5
if n % 5 >= 3:
result += 5
print(result)
こちらも「AC」と判定されました。
最後に
ABC304 はサーバ攻撃の影響で unrated となりましたが、運営のみなさまのおかげで、ABC305 は無事にコンテストが実施されました。
引き続き ABC の問題を紹介していきます。