結果
問題 |
No.204 ゴールデン・ウィーク(2)
|
ユーザー |
![]() |
提出日時 | 2025-04-16 16:49:41 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,263 bytes |
コンパイル時間 | 578 ms |
コンパイル使用メモリ | 82,068 KB |
実行使用メモリ | 54,432 KB |
最終ジャッジ日時 | 2025-04-16 16:51:15 |
合計ジャッジ時間 | 3,928 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
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)