A - 3 つの整数 (Three Integers) Editorial
by
TumoiYorozu
この解説は、C++ に入門したばかりの中高生レベルを想定して、考察の方法、コードの書き方の解説をします。
解法A
1 か 2 しか無いので、1 の個数をカウントして、1の個数が2個以上であれば 1、違ければ 2 を表示すると良い。
変数 x を用意して、もしもAが1だったら xに1を加算、もしもBが1だったらxに1を加算、もしもCが1だったらxに1を加算すると良い。
C++では、 のように、x+1 だけを書いても、x+1を計算するだけで、xの中身は書き換わらない。
x + 1を計算するだけではなく、x も更新しないといけないので
更に、変数に1加算する処理はよくあるので、それもまた省略して
コード例
(実際の提出のリンクはこちら) 実装のヒント1: 1 の個数をカウントするには
実装のヒント2: 「1を加算」
#include <bits/stdc++.h>
using namespace std;
int main(){
int A, B, C;
cin >> A >> B >> C;
int x = 0;
if (A == 1) {
x + 1;
}
}
x = x + 1
と書く必要がある。なおこの様な変数に値を加算する処理はよくあるので、C++ではこれを省略して
x += 1
で x に 1 を直接加算することが出来る。
x++
と書くことも出来る。
解答コード
#include <bits/stdc++.h>
using namespace std;
int main(){
int A, B, C;
cin >> A >> B >> C;
int x = 0;
if (A == 1) {
x++;
}
if (B == 1) {
x++;
}
if (C == 1) {
x++;
}
if (x >= 2) {
cout << 1 << endl;
} else {
cout << 2 << endl;
}
}
解法B
整数が3つあり、それぞれ1か2のどちらかなので、1か2のどちらかは必ず2つ以上ある。
つまり、A,B,C のうち少なくとも2つは同じであり、同じものがあればそれが多数派であることが分かる。
if 文を3つ書くと良い。
場合分けは、
コード例
(実際の提出のリンクはこちら)
また以下のようなコードも正解である。 実装のヒント1
実装のヒント2
を考えれば良い。
解答コード
#include <bits/stdc++.h>
using namespace std;
int main(){
int A, B, C;
cin >> A >> B >> C;
if (A == B) {
cout << A << endl;
} else if (A == C) {
cout << A << endl;
} else if (B == C) {
cout << B << endl;
}
}
#include <bits/stdc++.h>
using namespace std;
int main(){
int A, B, C;
cin >> A >> B >> C;
if (A == B || A == C) {
cout << A << endl;
} else {
cout << B << endl;
}
}
今回、3つの変数を2グループに分けるケースなので、\(\lceil \frac{3}{2} \rceil = \lceil 1.5 \rceil = 2\) であるので、2つあるグループが少なくとも1つ存在することが分かる。
今回は非常にシンプルなケースなのでわざわざ 鳩ノ巣原理を持ち出す必要は全く無いが、競技プログラミングでは鳩ノ巣原理の考え方を応用する問題はよく出てくるので、この用語は覚えておくとよいだろう。
posted:
last update: