AtCoder ABC 199 B – Intersection Python解説

スポンサーリンク

Intersection

長さ N の数列 A=(A1​,A2​,A3​,…,AN​), B=(B1​,B2​,B3​,…,BN​) が与えられます。
以下の条件を満たす整数 x の個数を求めてください。
1≤iN を満たす全ての整数 i について Ai​≤xBi

AtCoder Beginner Contest 「Intersection」

条件を満たすxの個数は、数列Bの範囲の最小値から数列Aの範囲の最大値+1したものです。
数列Bの最小値をmin関数、数列Aの最大値をmax関数を使い取得していきます。

注意点としては、数列Aの最大値が数列Bの最小値より大きい場合(条件を満たすxが存在しない場合)、計算結果でマイナスを出力してしまう可能性があるので、max関数を使い0より小さい数値にならないようにします。

n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

max_a = 0
min_b = 1000

for i in range(n):
    max_a = max(max_a, a[i])
    min_b = min(min_b, b[i])
    
print(max(0, min_b - max_a + 1))

数列Aの最大値はmax_a = max(max_a, a[i])、数列Bの最小値はmin_b = min(min_b, b[i])で取得しています。xが存在しない場合は0を出力したいので、max(0, min_b – max_a + 1)のようにmax関数を使い0より数値が小さくならないようにしています。