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

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

AtCoder AGC 002 A - Range Product (灰色, 200 点)

注意力系。現在の AGC ではあまり見ない系な気もする。

問題へのリンク

問題概要

整数  a \le b が与えられる。 a, a+1, \dots, b すべての積が正か負か 0 かを判定せよ。

制約

  •  -10^{9} \le a \le b \le 10^{9}

考えたこと

こういうのは場合分けを丁寧にやろう!!!

まず、 a \le 0 \le b のケースがわかりやすく  0 になる。

そう思ったら、それ以外の場合を考えることに専念すればよい。つまり今回の問題で言えば、

  •  a, a+1, \dots, b がすべて正の場合
  •  a, a+1, \dots, b がすべて負の場合

のみを考えれば良いということになる。今回の問題に限らず、


自明な場合をいち早く片付けておいて、「〜な場合を考えれば良い」という風にして考察を楽にする


というのは非常によくやる考察の流れだと思う。さて、すべてが正の場合は簡単で答えが正で確定する。すべてが負の場合も「偶数個だったら正」で「奇数個だったら負」で OK。

#include <iostream>
using namespace std;

int main() {
    int a, b; cin >> a >> b;
    if (a <= 0 && 0 <= b) cout << "Zero" << endl;
    else if (a > 0) cout << "Positive" << endl;
    else {
        int num = b - a + 1;
        if (num % 2 == 0) cout << "Positive" << endl;
        else cout << "Negative" << endl;
    }
}