結果
問題 | No.1670 Many Gacha |
ユーザー |
![]() |
提出日時 | 2025-03-26 15:59:19 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 297 ms / 2,000 ms |
コード長 | 1,227 bytes |
コンパイル時間 | 646 ms |
コンパイル使用メモリ | 82,776 KB |
実行使用メモリ | 118,116 KB |
最終ジャッジ日時 | 2025-03-26 16:00:32 |
合計ジャッジ時間 | 9,095 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 34 |
ソースコード
MOD = 998244353def main():import sysN, M = map(int, sys.stdin.readline().split())A = list(map(int, sys.stdin.readline().split()))# Precompute inverse and harmonic numbersmaxH = Ninv = [0] * (maxH + 2)inv[1] = 1for i in range(2, maxH + 1):inv[i] = pow(i, MOD - 2, MOD)H = [0] * (maxH + 2)for i in range(1, maxH + 1):H[i] = (H[i - 1] + inv[i]) % MOD# Compute B arrayB = []prev = 0for a in A:B.append(a - prev)prev = a# Compute s_is = [0] * (M + 2) # s[1..M]for i in range(M, 0, -1):s[i] = B[i-1] + s[i+1]if s[i] > N:raise ValueError("s_i exceeds N")ans = 0for i in range(M):current_B = B[i]current_A = A[i]s_i = s[i+1] # s[i+1] corresponds to the i-th (0-based) in Bs_i_minus_Bi = s_i - current_Bh_si = H[s_i]if s_i_minus_Bi >= 0:h_part = (h_si - H[s_i_minus_Bi]) % MODelse:h_part = h_si % MODterm = current_A * h_part % MODans = (ans + term) % MODprint(ans % MOD)if __name__ == '__main__':main()