結果
問題 | No.2254 Reverse Only |
ユーザー |
![]() |
提出日時 | 2023-04-09 02:27:01 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 948 ms / 2,000 ms |
コード長 | 1,535 bytes |
コンパイル時間 | 76 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 57,088 KB |
最終ジャッジ日時 | 2024-10-04 00:08:51 |
合計ジャッジ時間 | 14,860 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 47 |
ソースコード
import sys input = sys.stdin.readline N,K=map(int,input().split()) A=list(map(int,input().split())) B=list(map(int,input().split())) if sorted(A)!=sorted(B): print("No") exit() if K==N: if A==B or A==B[::-1]: print("Yes") else: print("No") exit() elif K>N: if A==B: print("Yes") else: print("No") exit() elif K<N-1: print("Yes") exit() # Rolling Hash LEN=N p=200000 # 文字の種類 mod=67280421310721 # Hashがぶつからない, pと互いに素な数を適当に指定 INV=pow(p,mod-2,mod) kake=pow(p,LEN-1,mod) score=0 for i in range(N): score=(score*p%mod+B[i])%mod TABLE=[0] # Rolling Hashのテーブル. 最初は0 for i in range(N): TABLE.append((p*TABLE[-1]%mod+A[i])%mod) # テーブルを埋める def hash_ij(i,j): # [i,j)のハッシュ値を求める return (TABLE[j]-TABLE[i]*pow(p,j-i,mod))%mod LIST=[TABLE[-1]] now=TABLE[-1] for i in range(N-1,-1,-1): a=A[i] now-=a now=now*INV%mod now=(now+a*kake)%mod LIST.append(now) TABLE=[0] # Rolling Hashのテーブル. 最初は0 A=A[::-1] for i in range(N): TABLE.append((p*TABLE[-1]%mod+A[i])%mod) # テーブルを埋める def hash_ij(i,j): # [i,j)のハッシュ値を求める return (TABLE[j]-TABLE[i]*pow(p,j-i,mod))%mod LIST.append(TABLE[-1]) now=TABLE[-1] for i in range(N-1,-1,-1): a=A[i] now-=a now=now*INV%mod now=(now+a*kake)%mod LIST.append(now) if score in LIST: print("Yes") else: print("No")