■
問題
挑戦結果
- 挑戦日:2021/10/31
- 結果:解けた
- 時間:15分
考えたこと
- 1周して戻るときは、modをとって計算
- しゃくとり法の感じで、現在が求めたい面積より多いときは縮める、少ないときは伸ばすをしていき、見つかるかどうかを行えば良い
公式解説
https://twitter.com/e869120/status/1408599656209080322
解説を読んだふりかえり
- 模範解法は円環を列にして二倍しておき、累積和をとっておき、開始位置を1~N-1とした上で、二分探索で求めたい面積があるかを調べるだった。
- しゃくとり法のほうが実装もしやすいような気はした。
ソース
N = int(input()) A = [int(x) for x in input().split()] # トータルの大きさ all = sum(A) # 現在の大きさ(先頭0、末尾0) cur = A[0] s,e = 0,0 ans = "No" # 開始位置は一周しない。終了位置-開始位置で長さチェック while s<N and e-s<N: # 十分の一が見つかったら終了 if cur * 10 == all: ans = 'Yes' break # 小さいときは、末尾を拡大する elif cur * 10 < all: e += 1 cur += A[e%N] # 大きいときは、先頭を縮める elif cur * 10 > all: cur -= A[s] s += 1 print(ans)