解説
のとき、 の操作は の操作に影響を及ぼさないことに着目します。
この考察により、 の昇順に の値を の値に貪欲に揃えるのが正当であることが分かります。
よって、以下のアルゴリズムが正当です。
- の順に以下の処理を行う。
- に対し、 を加算する。
また、この加算回数は調和級数の和を考えることで 回に抑えられます。
計算量はテストケースごとに であり、これは本問題の制約下において十分高速です。
言語と実装方針によってはオーバーフローが発生する場合があるため、十分注意してください。
実装例 (Python3)
def solve():
N = int(input())
X = [int(s) for s in input().split()]
A = [0] * N
answers = []
for i in range(1, N + 1):
diff = X[i - 1] - A[i - 1]
answers.append((i, diff))
for j in range(i - 1, N, i):
A[j] += diff
print(len(answers))
for k, x in answers:
print(k, x)
T = int(input())
for _ in range(T):
solve()
ユーザー解説
ユーザー解説を書くユーザー解説はまだありません。