AGC002 A - Range Product

備忘録

問題

atcoder.jp

回答

import sys
import os
import math
import bisect
import itertools
import collections
import heapq
import queue
import array
import time
import numpy as np
from numpy import linalg as LA

# 時々使う
# import numpy as np
# from decimal import Decimal, ROUND_HALF_UP
# from scipy.sparse.csgraph import csgraph_from_dense, floyd_warshall
# from collections import defaultdict, deque

# 再帰の制限設定
sys.setrecursionlimit(10000000)


def ii(): return int(sys.stdin.buffer.readline().rstrip())
def il(): return list(map(int, sys.stdin.buffer.readline().split()))
def fl(): return list(map(float, sys.stdin.buffer.readline().split()))
def iln(n): return [int(sys.stdin.buffer.readline().rstrip())
                    for _ in range(n)]


def iss(): return sys.stdin.buffer.readline().decode().rstrip()
def sl(): return list(map(str, sys.stdin.buffer.readline().decode().split()))
def isn(n): return [sys.stdin.buffer.readline().decode().rstrip()
                    for _ in range(n)]


def lcm(x, y): return (x * y) // math.gcd(x, y)


# MOD = 10 ** 9 + 7
MOD = 998244353
INF = float('inf')


def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    a, b = il()

    if a <= 0 and b >= 0:
        print('Zero')
        exit()

    if b < 0 and abs(b-a-1) % 2 != 0:
        print('Negative')
        exit()

    print('Positive')


if __name__ == '__main__':
    main()

考え方

与えられるabの範囲を実際に計算すると時間が足りません。
そのため、ケース分けを行って、計算結果が正負または0のいずれかであるか判定します。

abの範囲にゼロを含める場合には必ず積がゼロになります。
b < 0のとき(aからbまでの範囲が負である場合)には負の数が奇数の場合に積が負となります。
その他の場合については全て積が正となります。