結果

問題 No.3798 algo to goal
ユーザー titia
提出日時 2026-11-14 04:47:57
言語 PyPy3
(8.0.1 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
WA  
実行時間 -
コード長 1,565 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 80 ms
コンパイル使用メモリ 63,872 KB
実行使用メモリ 80,144 KB
最終ジャッジ日時 2026-11-14 04:48:14
合計ジャッジ時間 16,213 ms
ジャッジサーバーID
(参考情報)
judge5_0 / judge4_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 5 WA * 35
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import sys
input = sys.stdin.readline

from collections import Counter

Q=int(input())

def tentou(A):
    LEN=len(A)
    MAX=max(A)
    MIN=min(A)

    BIT=[0]*(MAX-MIN+2) # 出現回数をbit indexed treeの形でもっておく.

    def update(v,w): # index vにwを加える
        while v<=MAX-MIN+1:
            BIT[v]+=w
            v+=(v&(-v)) # 自分を含む大きなノードへ. たとえばv=3→v=4

    def getvalue(v): # MIN~vの区間の和を求める
        ANS=0
        while v!=0:
            ANS+=BIT[v]
            v-=(v&(-v)) # たとえばv=3→v=2へ
        return ANS

    ANS=0        
    for i in range(LEN): # A[0],A[1],...とBITを更新しながら,各A[i]について転倒数を求める.
        bit_ai=A[i]-MIN+1 # A[i]がBITの中で何番目か

        ANS+=i # 今まで出現した個数.
        ANS-=getvalue(bit_ai) # 今まで出現した中で,MIN~bit_aiの個数を減らす.
        # bit_ai~MAXの出現個数が転倒数

        update(bit_ai,1)

    return ANS

for tests in range(Q):
    S=input().strip()
    T=input().strip()

    A=[ord(s)-96 for s in S]
    B=[ord(s)-96 for s in T]

    CA=Counter()
    CA2=Counter()

    CB=Counter()
    CB2=Counter()

    for i in range(len(S)):
        if i%2==0:
            CA[A[i]]+=1
            CB[B[i]]+=1
        else:
            CA2[A[i]]+=1
            CB2[B[i]]+=1

    if CA==CB and CA2==CB2:
        pass
    else:
        print("No")
        continue

    if tentou(A)%2==tentou(B)%2:
        print("Yes")
    else:
        print("No")

    
0