結果
| 問題 |
No.204 ゴールデン・ウィーク(2)
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-16 01:14:02 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,263 bytes |
| コンパイル時間 | 360 ms |
| コンパイル使用メモリ | 81,724 KB |
| 実行使用メモリ | 54,288 KB |
| 最終ジャッジ日時 | 2025-04-16 01:15:19 |
| 合計ジャッジ時間 | 3,425 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 24 WA * 22 |
ソースコード
D = int(input())
s1 = input().strip()
s2 = input().strip()
s = s1 + s2
def create_intervals(s):
if not s:
return []
intervals = []
current_char = s[0]
start = 0
for i in range(1, len(s)):
if s[i] == current_char:
continue
else:
intervals.append((current_char, start, i-1))
current_char = s[i]
start = i
intervals.append((current_char, start, len(s)-1))
return intervals
intervals = create_intervals(s)
max_o = 0
for interval in intervals:
if interval[0] == 'o':
max_o = max(max_o, interval[2] - interval[1] + 1)
if D == 0:
print(max_o)
else:
max_candidate = max_o
# Process x intervals
for i in range(len(intervals)):
interval = intervals[i]
if interval[0] != 'x':
continue
x_len = interval[2] - interval[1] + 1
available = min(D, x_len)
prev_o = intervals[i-1] if i > 0 and intervals[i-1][0] == 'o' else None
next_o = intervals[i+1] if i < len(intervals)-1 and intervals[i+1][0] == 'o' else None
if prev_o and next_o:
total = (prev_o[2] - prev_o[1] + 1) + available + (next_o[2] - next_o[1] + 1)
max_candidate = max(max_candidate, total)
elif prev_o:
total = (prev_o[2] - prev_o[1] + 1) + available
max_candidate = max(max_candidate, total)
elif next_o:
total = available + (next_o[2] - next_o[1] + 1)
max_candidate = max(max_candidate, total)
else:
max_candidate = max(max_candidate, available)
# Process o intervals
for i in range(len(intervals)):
interval = intervals[i]
if interval[0] != 'o':
continue
o_len = interval[2] - interval[1] + 1
# Previous x part
if i == 0:
total = D + o_len
max_candidate = max(max_candidate, total)
else:
prev_interval = intervals[i-1]
if prev_interval[0] == 'x':
a = prev_interval[2] - prev_interval[1] + 1
available = min(D, a)
total = available + o_len
max_candidate = max(max_candidate, total)
# Next x part
if i == len(intervals) - 1:
total = o_len + D
max_candidate = max(max_candidate, total)
else:
next_interval = intervals[i+1]
if next_interval[0] == 'x':
b = next_interval[2] - next_interval[1] + 1
available = min(D, b)
total = o_len + available
max_candidate = max(max_candidate, total)
# Check front and back infinite x parts
# Front x part
if intervals[0][0] == 'o':
total = D + (intervals[0][2] - intervals[0][1] + 1)
max_candidate = max(max_candidate, total)
else:
max_candidate = max(max_candidate, D)
# Back x part
if intervals[-1][0] == 'o':
total = (intervals[-1][2] - intervals[-1][1] + 1) + D
max_candidate = max(max_candidate, total)
else:
max_candidate = max(max_candidate, D)
# Check D alone
max_candidate = max(max_candidate, D)
print(max_candidate)
lam6er