結果
| 問題 |
No.2254 Reverse Only
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-03-24 23:48:03 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 195 ms / 2,000 ms |
| コード長 | 1,374 bytes |
| コンパイル時間 | 327 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 139,268 KB |
| 最終ジャッジ日時 | 2024-09-18 17:43:34 |
| 合計ジャッジ時間 | 6,780 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 47 |
ソースコード
import sys
input = lambda :sys.stdin.readline()[:-1]
ni = lambda :int(input())
na = lambda :list(map(int,input().split()))
yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES")
no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO")
#######################################################################
def Z_algorithm(s):
n = len(s)
Z = [0] * n # z[i] = sum(s[0::n - i], s[i::n])
Z[0] = n
i, j = 1, 0
while i < n:
# 共通部分を見つけるパート
while i + j < n and s[j] == s[i + j]:
j += 1
Z[i] = j
if j == 0:
i += 1
continue
# 計算の再利用パート
# k + Z[k] < j なら再利用できる
k = 1
while k < j and k + Z[k] < j:
Z[i + k] = Z[k]
k += 1
# k個先まで見たのでk個先にバトンを渡す
i += k
j -= k
return Z
n,k = na()
a = na()
b = na()
if k <= n-2:
if sorted(a) == sorted(b):
Yes()
else:
No()
elif k == n:
if a == b or b == a[::-1]:
Yes()
else:
No()
elif k > n:
if a == b:
Yes()
else:
No()
else:
S = a + a + b + b
z = Z_algorithm(S)
for i in range(n*2, n*4):
if z[i] >= n:
Yes()
exit()
No()