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

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

AtCoder ABC 046 A - AtCoDeerくんとペンキ (灰色, 100 点)

3 つの整数についてあれこれ問う問題はこの時代多かった

問題概要

3 個の整数  a, b, c がある。これらは 1 以上 100 以下の整数である。

これらの整数の種類数を求めよ。

コード

この手の問題は、「配列として受け取ってソートする」テクニックが使える。たいていの問題は、まずソートしてしまっても答えが変わらないことが多く、しかも考えやすくなることが多い。よって「まずソートしてしまう」は、とても使えるテクニックとなる。

ソートした配列を v[0], v[1], v[2] とすると、次のように考えられる。

  • もし v[0] == v[2] だったら、3 つ全部等しいので、答えは 1
  • v[0] == v[1]v[1] < v[2] だったら、答えは 2
  • v[0] < v[1]v[1] == v[2] だったら、答えは 2
  • それ以外は、すべて異なるので、答えは 3
#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<int> v(3);
    cin >> v[0] >> v[1] >> v[2];
    
    // 小さい順に並び替える
    sort(v.begin(), v.end());
    
    if (v[0] == v[2]) cout << 1 << endl;
    else if (v[0] == v[1] && v[1] < v[2]) cout << 2 << endl;
    else if (v[0] < v[1] && v[1] == v[2]) cout << 2 << endl;
    else cout << 3 << endl;
}