Official
B - Polyline Editorial
by
B - Polyline Editorial
by
harurun4635
Editorial for printing
各 \(i\) について「 \((i, A_i)\) と \((i+1, A_{i+1})\) を結ぶ線分が \(y = K\) となるか?」を数えることにすると、端点について二重に数えてしまう事があることに注意しましょう。
いくつかの解決方法がありますが、「端点」と「そうでない点」を分けて数える方法があります。
「端点」は \(x\) 座標が整数の点ですから、これは「配列 \(A\) に含まれる \(K\) の個数」と一致します。
「そうでない点」は各 \(i\) について \(A_i \lt K \lt A_{i+1}\) もしくは \(A_i \gt K \gt A_{i+1}\) のときに存在します。
それぞれは重複することはありませんから、独立に数えればよいです。
実装例 (Python)
n, k = map(int, input().split())
a = list(map(int, input().split()))
ans = a.count(k) # 端点
for i in range(n - 1):
if a[i] < k < a[i + 1] or a[i + 1] < k < a[i]:
ans += 1 # そうでない点
print(ans)
posted:
last update: