Official

B - 水やり当番 / Watering Duty Editorial by sounansya


\(D= D_1N+D_2\) \((0 \le D_2< N)\) とします。つまり、\(D\) を \(N\) で割った商とあまりをそれぞれ \(D_1,D_2\) とします。

すると、\(N\) 人は全員最低でも \(D_1\) 回は水やりをします。したがって、答えは問題の \(D\) を \(D_2\) に置き換えた問題に対する答えに \(D_1\times \sum_i A_i\) を足した値と一致します。

問題の \(D\) を \(D_2\) に置き換えた問題は愚直に for 文などを使って求めることができます。

実装例(Python3)

n, d, s = map(int, input().split())
s -= 1
a = list(map(int, input().split()))
ans = d // n * sum(a)
d %= n
for i in range(d):
    ans += a[(s + i) % n]
print(ans)