結果
| 問題 |
No.2204 Palindrome Splitting (No Rearrangement ver.)
|
| コンテスト | |
| ユーザー |
tamato
|
| 提出日時 | 2023-02-03 21:39:02 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 861 ms / 2,000 ms |
| コード長 | 1,198 bytes |
| コンパイル時間 | 217 ms |
| コンパイル使用メモリ | 82,308 KB |
| 実行使用メモリ | 272,640 KB |
| 最終ジャッジ日時 | 2024-07-02 19:28:39 |
| 合計ジャッジ時間 | 9,726 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 33 |
ソースコード
mod = 998244353
def main():
import sys
input = sys.stdin.readline
S = input().rstrip('\n')
N = len(S)
G = [[0] * (N+1) for _ in range(N+1)]
# odd
for m in range(N):
G[m][m+1] = 1
for j in range(1, N + 1):
if m - j < 0 or m + j >= N:
break
if S[m - j] == S[m + j]:
G[m - j][m + j + 1] = 1
else:
break
# even
for m in range(1, N):
for j in range(1, N+1):
if m - j < 0 or m + j - 1 >= N:
break
if S[m - j] == S[m + j - 1]:
G[m - j][m + j] = 1
else:
break
ok = 1
ng = N + 1
mid = (ok + ng) // 2
while ng - ok > 1:
dp = [0] * (N+1)
dp[0] = 1
for i in range(N):
if dp[i] == 0:
continue
for j in range(mid, N+1):
if i + j >= N+1:
break
if G[i][i+j]:
dp[i+j] = 1
if dp[N]:
ok = mid
else:
ng = mid
mid = (ok + ng) // 2
print(ok)
if __name__ == '__main__':
main()
tamato