結果
問題 | No.1848 Long Prefixes |
ユーザー |
|
提出日時 | 2022-02-19 12:31:43 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 155 ms / 2,000 ms |
コード長 | 763 bytes |
コンパイル時間 | 196 ms |
コンパイル使用メモリ | 82,104 KB |
実行使用メモリ | 133,768 KB |
最終ジャッジ日時 | 2024-06-29 10:22:22 |
合計ジャッジ時間 | 5,713 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 40 |
ソースコード
N = int(input()) A = list(map(int,input().split())) S = input() s = [] B = [] i = 0 s.append(S[0]) B.append(A[0]) for i in range(1,N): if S[i] == S[i-1]: B[-1] += A[i] else: s.append(S[i]) B.append(A[i]) S = "".join(s) A = B N = len(S) ans = 0 P = 10 ** 9 + 7 for i in range(N): if S[i] != S[0]:continue if A[i] < A[0]: ans += A[i] * (A[i]+1) // 2 ans %= P else: d = A[i] - A[0] ans += A[0] * d ans %= P ans += A[0] * (A[0] + 1) // 2 ans %= P j = 1 while i + j < N and S[j] == S[i+j]: ans += min(A[j],A[i+j]) ans %= P if A[j] != A[i+j]: break else: j += 1 print(ans)