AtCoder が提供しているABC(AtCoder Beginner Contest)270 のA問題をC++とPythonで解いてみました。ABC270は、2022年9月24日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
A問題 1-2-4 Test(Difficulty : 45)
問題はリンク先をご覧ください。
2進数の理解が必要な問題です。AtCoder Problems による Difficulty は、45 でした。
解答案
問題を解く方針を書きだします。
- 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を計算した値が、解答となる。
- 2進数3桁のそれぞれの桁が試験が解けたか(1)か解けなかった(0)を表す。
ビット演算は、初心者には、難しい題材かもしれません。
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 の問題を紹介していきます。