ABC070-B - Two Switches を解く
ABC070-B - Two Switches
1発で通すのは中々難しい問題
場合分けの際に漏れがでやすい
シミュレーションするならば
2つの線分を横に並べた状態をイメージするとわかりやすいだろう
全パターンを以下に示す
その1
AーーーーーーB
CーーーーーーD
その2
AーーーーーーB
CーーーーーーD
その3
AーーーーーーB
CーーーーーーーーD
その4
AーーーーーーB
CーーーーーーD
その5
AーーーーーーB
CーーーーーーD
その6
AーーーーーーB
CーーーーーーD
その7
AーーーーーーーーB
CーーーーーーD
その8
AーーーーーーB
CーーーーーーD
その9
AーーーーーーB
CーーーーーーD
前半は A-B を動かして、後半は C-D を動かすイメージでパターンを列挙した
パターンが被っているものもいくつかあるが、そのまま書いて問題ない
下手に無駄な部分を消そうとするとパターン漏れが出来る可能性があるからだ
以上を踏まえて書いたコードを以下に示す
提出したコード
# 入力 A,B,C,D=map(int,input().split()) if B<=C: print(0) elif A<=C and C<=B and B<=D: print(B-C) elif C<=A and B<=D: print(B-A) elif C<=A and A<=D and D<=B: print(D-A) elif D<=A: print(0) elif C<=A and A<=D and D<=B: print(D-A) elif A<=C and D<=B: print(D-C) elif A<=C and C<=B and C<=D: print(C-A) elif B<=C: print(0)
提出結果はACでした
解説ではシンプルでわかりやすいコードを書いていました
それに比べると自分の書いたコードは泥臭いしバグりやすいですね…
興味のある方は以下リンクよりご確認ください