AtCoder ABC 110 B – 1 Dimensional World’s Tale Python解説

スポンサーリンク

1 Dimensional World’s Tale

A 帝国の首都は座標 X、B 帝国の首都は座標 Y に位置しています。

ある日、A 帝国は座標x1​,x2​,…,xN、B 帝国は座標y1​,y2​,…,yM の都市を支配下に置きたくなりました。
このとき、以下の 3 つの条件をすべて満たす整数 Z が存在すれば、合意が成立して戦争は起きませんが、存在しない場合には戦争が起こります。

X<ZY
x1​,x2​,…,xN​< Z
y1​,y2​,…,yM​≥Z

戦争が起こるかどうか判定してください。

AtCoder Beginner Contest 「1 Dimensional World’s Tale」

不等号が多くて混乱しますが、A帝国の首都Xと都市xは一緒に考えてよいです。同じようにB帝国の首都Yと都市yも一緒にして、x,X < Z <= y,Yを満たすZが存在するかを確認すれば大丈夫です。

n, m, x, y = map(int, input().split())

x_list = [int(x) for x in input().split()] + [x]
y_list = [int(y) for y in input().split()] + [y]

x_max = max(x_list)
y_min = min(y_list)

for z in range(-100, 101):
    if x_max < z <= y_min:
        print("No War")
        break
else:
    print("War")

x_listには受け取った都市の座標に加えて首都Xの座標を入れています。これにmax関数を使ってA帝国の一番大きい座標を求めています。B帝国も同様に首都Yの座標を入れ、B帝国はmin関数で一番小さな座標を求めています。

あとはXとYが取り得る範囲-100から100までで条件を満たすZが存在するかを確認して完了です。

n, m, x, y = map(int, input().split())

x_max = max([int(x) for x in input().split()] + [x])
y_min = min([int(y) for y in input().split()] + [y])

if y_min - x_max >= 1:
    print("No War")
else:
    print("War")

こちらのコードは上記のコードをさらに簡略化したものです。y_min と x_maxの差を求めて、差が1以上あればZが存在することができることを示しています。

AtCoderB問題

Posted by cheese