解説つき!競ってわかる はじめてpythonプログラミング

競プロの情報発信と備忘録を兼ねている

ABC238B

ABC238B の解説

atcoder.jp


解答コード

https://atcoder.jp/contests/abc238/submissions/29074032

 

問題

ピザに切り込みを入れていって,最大のピースの角度を求める問題です.

 

解説

「ピザを時計回りにに回転させる」とありますが,「カッターを"反"時計回り」に回転させます.
(問題文で正の角度を時計回りに回転させているので,時計回りを正として計算しています,ご了承ください.)

 

概要図です.

f:id:nodashin_jpn:20220208082843j:plain

ABC238B_overview

 

まず,標準入力の読み取り,[0, 360] の入ったリストを作成します.

N = int(input())
L = [0, 360]
A = list(map(int, input().split()))

 

前のカッターの位置から反時計回りに移動させた位置を記録します.角度の値がマイナスになったり,360度を超えたりするときは,余りを計算すると良いです.

d = 0
for a in A:
    d = (d - a) % 360
    L.append(d)

 

ソートします.

L = sorted(L, reverse=True)

 

最後に前後の差を計算して,最大となる値を出力します.

ans = 0
for lh, ll in zip(L[:-1], L[1:]):
    ans = max(ans, lh-ll)
print(ans)

 

以上,ABC238Bの解法でした.

 

 

<参考解説リンク>

1) 【AtCoder解説】PythonでABC238のA,B,C,D,E問題を制する! - Qiita