AtCoder

ABC305 A問題(Water Station)を解く

AtCoder_ABC305_A

AtCoder が提供しているABC(AtCoder Beginner Contest)305 のA問題をC++とPythonで解いてみました。ABC305は、2023年6月10日21:00に実施されました。

AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。

A問題 Water Station(Difficulty : 10)

問題はリンク先をご覧ください。

ABC305 A問題 Water Station

与えられた整数に一番近い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 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA