結果
| 問題 | No.3798 algo to goal |
| ユーザー |
detteiuu
|
| 提出日時 | 2026-11-13 23:03:23 |
| 言語 | PyPy3 (8.0.1 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 709 ms / 2,000 ms |
| + 351µs | |
| コード長 | 1,812 bytes |
| 記録 | |
| コンパイル時間 | 157 ms |
| コンパイル使用メモリ | 64,384 KB |
| 実行使用メモリ | 105,368 KB |
| 最終ジャッジ日時 | 2026-11-13 23:03:56 |
| 合計ジャッジ時間 | 16,680 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 40 |
ソースコード
from sys import stdin
input = stdin.readline
class BIT:
def __init__(self, A):
self.size = len(A)
self.bit = [0]*(len(A)+1)
for i in range(len(A)):
self.add(i, A[i])
def sum(self, i):
i += 1
ans = 0
while i > 0:
ans += self.bit[i]
i -= -i&i
return ans
def query(self, l, r):
if l == 0:
return self.sum(r-1)
else:
return self.sum(r-1)-self.sum(l-1)
def add(self, i, x):
i += 1
while i <= self.size:
self.bit[i] += x
i += -i&i
def code(s):
return ord(s)-ord("a")
def codeR(n):
return chr(ord("a")+n)
def func(S):
L, R = [], []
for i, s in enumerate(S):
if i%2 == 0:
L.append(code(s))
else:
R.append(code(s))
return L, R
def compress(A):
S = sorted(set(A))
D = dict()
for i in range(len(S)):
D[S[i]] = i
return D
def InversionNumber(A):
D = compress(A)
L = len(D)
B = BIT([0]*L)
ans = 0
for a in A:
idx = D[a]
if idx+1 < L:
ans += B.query(idx+1, L)
B.add(idx, 1)
return ans
for _ in range(int(input())):
S = input().rstrip("\n")
T = input().rstrip("\n")
N = len(S)
SL, SR = func(S)
TL, TR = func(T)
if sorted(SL) != sorted(TL):
print("No")
continue
if sorted(SR) != sorted(TR):
print("No")
continue
if (len(set(SL)) < len(SL) or len(set(TL)) < len(TL) or
len(set(SR)) < len(SR) or len(set(TR)) < len(TR)):
print("Yes")
continue
a = InversionNumber(SL)%2 == InversionNumber(TL)%2
b = InversionNumber(SR)%2 == InversionNumber(TR)%2
print("Yes" if a == b else "No")
detteiuu