[AtCoder] ABC 053 D – Card Eater

2020年12月12日

問題

方針

カードの種類を \( m \) とします。このとき、残ったカードを \( m \) 枚にするためには、\( N – m \) 枚のカードを取り除かなければいけません。\( 1 \) 回の操作で取り除かれるカードは \( 2 \) 枚なので、\( N – m \) が偶数であれば答えは \( m \) となり、奇数であれば答えは \( m – 1\) となります。

コード

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

int main() {
    int N;
    cin >> N;
    int A[N];
    set<int> s;
    for (int i = 0; i < N; i++) {
        cin >> A[i];
        s.insert(A[i]);
    }
    if (s.size() % 2 == 0) {
        cout << s.size() - 1 << "\n";
    } else {
        cout << s.size() << "\n";
    }
    return 0;
}

感想

思いつきませんでした。