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

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

AtCoder ABC 366 A - Election 2 (7Q, 灰色, 100 点)

頭がこんがらがる系の問題!

問題概要

高橋君と青木君を候補者とする選挙が行われ、 N 票が投票された。

現在開票中で、高橋君が  T 票、青木君が  A 票を得ている。この時点で残りの票にかかわらず勝敗が確定しているかどうかを判定せよ。

制約

  •  N は奇数
  •  1 \le N \le 99
  •  T + A \le N

考えたこと

落ち着いて考えよう。勝敗が確定しているとは、次の 2 つのいずれかである。

  • パターン A:高橋君の勝利が確定している
  • パターン B:青木君の勝利が確定している

さらに掘り下げよう。

パターン A について考える。高橋君の勝利が確定しているとは、すなわち「たとえ残りの票がすべて青木君に入っていたとしても高橋君の獲得票数の方が多い」ということである。この条件は次のように書ける。

  • 残りの票数を  r = N - (T + A) とする
  • このとき、 T \gt A + r である

青木君の勝利が確定している条件は、同様に  A \gt T + r と書ける。

式をより簡単に

上記の条件は、もう少し簡潔にかくこともできる。高橋君の勝利が確定している条件を式変形すると......

 T \gt A + N - (T + A)
 2T \gt N

と書ける。実は  A の値が関係ないことがわかる。青木君の勝利が確定している条件も同様に  2A \gt N と書ける。

コード

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

int main() {
    int N, T, A;
    cin >> N >> T >> A;
    
    int rem = N - (T + A);
    if (T > A + rem || A > T + rem) cout << "Yes" << endl;
    else cout << "No" << endl;
}