結果
| 問題 | No.3370 AB → BA |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-01-08 23:08:48 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,318 bytes |
| 記録 | |
| コンパイル時間 | 302 ms |
| コンパイル使用メモリ | 82,344 KB |
| 実行使用メモリ | 268,112 KB |
| 最終ジャッジ日時 | 2026-01-08 23:08:52 |
| 合計ジャッジ時間 | 4,127 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | TLE * 1 -- * 19 |
ソースコード
import sys
MOD = 998244353
def main():
S = sys.stdin.readline().strip()
# 'A' lar uchun B qiymatlarini hisoblash
B = []
cnt = 0
for i, ch in enumerate(S):
if ch == 'A':
# i+1 - cnt = pozitsiya - oldingi 'A' lar soni
B.append(i + 1 - cnt)
cnt += 1
N = len(B)
if N == 0:
print(1)
return
# A massivini yaratish (eng kichik qiymatlar)
A = [0] * N
for i in range(1, N):
A[i] = max(A[i], A[i - 1])
# DP[j] = oxirgi elementi j bo'lgan ketma-ketliklar soni
max_val = B[-1]
dp = [0] * (max_val + 2)
# Birinchi 'A' uchun boshlang'ich holat
for j in range(A[0], B[0]):
dp[j] = 1
# Har bir keyingi 'A' uchun
for i in range(1, N):
new_dp = [0] * (max_val + 2)
# Prefix sum hisoblash
prefix = [0] * (max_val + 2)
for j in range(max_val + 1):
prefix[j + 1] = (prefix[j] + dp[j]) % MOD
# Yangi qiymatlarni hisoblash
for j in range(A[i], B[i]):
# Barcha oldingi qiymatlar <= j uchun
new_dp[j] = prefix[j + 1] % MOD
dp = new_dp
# Natijani hisoblash
result = sum(dp) % MOD
print(result)
if __name__ == "__main__":
main()