Official

B - 果物の収穫シーズン / Fruit Harvest Season Editorial by harurun4635


単純にすべての \(d\) について求めると \(O(NK)\) かかってしまいます。

しかし、 \(d\) 日目開始と \(d+1\) 日目開始での違いは

  • \(d\) 日目のアルバイトが無くなり
  • \(d+K\) 日目のアルバイトが増える

といった違いしかありません。

よって、

  • はじめに \(d = 1\) について \(O(K)\) で求める。
  • \(d = 2 , \dots, N - K + 1\) について \(d - 1\) との差を \(O(1)\) で求める

とすれば \(O(N)\) で解く事ができます。


実装例

n, k = map(int, input().split())
w = input().split()

ans = c = sum(w[i] == "S" for i in range(k))
for i in range(n - k):
    c -= w[i] == "S"
    c += w[i+k] == "S"
    ans = max(ans, c)
print(ans)

posted:
last update: