結果
| 問題 |
No.2209 Flip and Reverse
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-20 18:46:50 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 358 ms / 2,000 ms |
| コード長 | 1,572 bytes |
| コンパイル時間 | 206 ms |
| コンパイル使用メモリ | 82,500 KB |
| 実行使用メモリ | 272,104 KB |
| 最終ジャッジ日時 | 2025-03-20 18:47:43 |
| 合計ジャッジ時間 | 9,920 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 30 |
ソースコード
n = int(input())
s = input().strip()
t = input().strip()
def compute_min_steps(s, t_target, reversed_t):
delta = []
for i in range(n):
delta.append(int(s[i] != t_target[i]))
c1 = 0
c3 = 0
cmid = 0
# Process mirror pairs
processed = [False] * n
for x in range(n):
y = n - 1 - x
if x >= y:
break
processed[x] = processed[y] = True
dx = delta[x]
dy = delta[y]
if dx == dy:
if dx == 0:
pass # c0 +=1
else:
c3 +=1 # contributes 2 steps, adds 1 to both groups
else:
c1 +=1 # contributes 1 step, allocated to group A or B
# Check middle element
if n % 2 == 1:
mid = n // 2
if delta[mid] == 1:
cmid +=1
return (c3, c1, cmid)
# Case even m: target is T
reversed_t_even = list(t)
c3_even, c1_even, cmid_even = compute_min_steps(s, reversed_t_even, False)
steps_even = 2 * c3_even + c1_even + cmid_even
valid_even = False
if (c1_even + cmid_even) % 2 == 0 and steps_even % 2 == 0:
valid_even = True
# Case odd m: target is reversed T
reversed_t_odd = list(t[::-1])
c3_odd, c1_odd, cmid_odd = compute_min_steps(s, reversed_t_odd, True)
steps_odd = 2 * c3_odd + c1_odd + cmid_odd
valid_odd = False
if (c1_odd + cmid_odd) % 2 == 1 and steps_odd % 2 == 1:
valid_odd = True
candidates = []
if valid_even:
candidates.append(steps_even)
if valid_odd:
candidates.append(steps_odd)
if len(candidates) == 0:
print(-1)
else:
print(min(candidates))
lam6er