けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

JOI 一次予選 2020 (第 1 回) A - 3 つの整数 (8Q, 難易度 1)

記念すべき「JOI 一次予選」が最初に行われた年の問題。この頃はまだ A 問題も結構難しかったのですね。

問題概要

3 個の整数  A, B, C が与えられる。これらの整数は 1 か 2 のいずれかである。

1 と 2 のうち、どちらの方が多くあるかを判定せよ。

解法

まず、次の値を求めるとよいでしょう。


one ← 1 が何個あるか


これは、A, B, C それぞれについて、1 であるかどうかを判定し、1 であれば one をインクリメントすることで実現できます。たとえば C++ では次のように実装できます。

ine one = 0;
if (A == 1) one++;
if (B == 1) one++;
if (C == 1) one++;

1 の個数 one を求めると、2 の個数 two も次のように自動的に求められます。

int two = 3 - one;

あとは、onetwo の大きさを比較して、one の方が大きい場合には 1 を出力し、two の方が大きい場合には 2 を出力すればよいでしょう。

コード

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

int main() {
    int A, B, C;
    cin >> A >> B >> C;
    
    // 1 の個数を求める
    int one = 0;
    if (A == 1) one++;
    if (B == 1) one++;
    if (C == 1) one++;
    
    // 2 の個数を求める
    int two = 3 - one;
    
    // 比較して答える
    if (one > two)
        cout << 1 << endl;
    else
        cout << 2 << endl;
}