AtCoder

ABC270 A問題(1-2-4 Test)を解く

AtCoder_ABC270_A

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

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

A問題 1-2-4 Test(Difficulty : 45)

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

ABC270 A問題 1-2-4 Test

2進数の理解が必要な問題です。AtCoder Problems による Difficulty は、45 でした。ABC A問題としては、難しい問題です。

解答案

問題を解く方針を書きだします。

  • 2つの整数を標準入力から読み取る。
  • テストの点数が、それぞれ1点、2点、4点であるため、合計の点数を2進数と表現することができる。
    • 2進数3桁のそれぞれの桁が試験が解けたか(1)か解けなかった(0)を表す。
      • 合計点が5点(2進数101)であれば、4点の問題(2進数100)と1点の問題(2進数001)を解いている。
      • 合計点が3点(2進数011)であれば、2点の問題(2進数010)と1点の問題(2進数001)を解いている。
    • 題意より2つの整数のビットORを計算した値が、解答となる。

ビット演算は、初心者には、難しい題材かもしれません。

C++ プログラム例(ABC270A)

#include <bits/stdc++.h>
using namespace std;

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

	cout << (a | b) << endl;

	return 0;
}

C++では、ビットOR演算子は、’|’ となります。その結果を返しているだけです。論理OR演算子 ‘||’ と区別して理解しましょう。

ビットOR演算子と論理演算子は、間違える可能性もあるため、C++ では、キーワード bitor をビットOR演算子の代わりに使うことができます。普及しているとは言えないですが、キーワードを使った方が分かりやすくなっていると感じます。

#include <bits/stdc++.h>
using namespace std;

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

	cout << (a bitor b) << endl;

	return 0;
}

AtCoder は、問題ページから解答プログラムを提出できます。このプログラムは、AC(Accepted=正しいプログラム)と判定されました。

Python プログラム例(ABC270A)

Python の演算子は、C(C++)と同じものが多く、ビットOR演算子も同じです。以下となります。

"""AtCoder Beginner Contest 270 A"""
a, b = map(int, input().split())
print(a | b)

Python 版も「AC」と判定されました。

最後に

2進数の知識が必要で、A問題としては、少し難しかったかもしれません。多く問題を解いていくと、経験する文法の網羅度も上がっていきます。

引き続き ABC の問題を紹介していきます。

COMMENT

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

CAPTCHA