結果
| 問題 |
No.2210 equence Squence Seuence
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-02-05 19:31:43 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,101 ms / 2,000 ms |
| コード長 | 1,956 bytes |
| コンパイル時間 | 199 ms |
| コンパイル使用メモリ | 82,408 KB |
| 実行使用メモリ | 134,692 KB |
| 最終ジャッジ日時 | 2024-07-04 06:39:57 |
| 合計ジャッジ時間 | 11,740 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 25 |
ソースコード
import sys
from collections import deque, Counter
input = lambda: sys.stdin.readline().rstrip()
ii = lambda: int(input())
mi = lambda: map(int, input().split())
li = lambda: list(mi())
inf = 2 ** 63 - 1
mod = 998244353
from functools import cmp_to_key
class Rollinghash:
def __init__(self, string, base, mod):
n = len(string)
self.__base = base
self.__mod = mod
self.__hash = [0]*(n + 1)
self.__pow = [1]*(n + 1)
if isinstance(string, str):
for i, c in enumerate(string):
o = ord(c) - ord('a') + 1
self.__hash[i + 1] = (self.__hash[i] * self.__base + o) % self.__mod
self.__pow[i + 1] = self.__pow[i] * self.__base % self.__mod
else:
for i, c in enumerate(string):
o = c
self.__hash[i + 1] = (self.__hash[i] * self.__base + o) % self.__mod
self.__pow[i + 1] = self.__pow[i] * self.__base % self.__mod
self.pow = self.__pow
def query(self, l, r):
ret = (self.__hash[r] - self.__hash[l] * self.__pow[r - l]) % self.__mod
return ret
def same(self, l1, r1, l2, r2):
return self.query(l1, r1) == self.query(l2, r2)
import random
n, k = mi()
a = li()
base = random.randint(1, 998244352)
S = Rollinghash(a, base, mod)
def calchash(i, r):
if r < i:
return S.query(0,r)
else:
return (S.query(0, i) * S.pow[r - i] + S.query(i + 1,r + 1)) % mod
def ele(i, x):
if x < i:
return a[x]
else:
return a[x + 1]
def cmp(x, y):
ng = n - 1
ok = 0
while abs(ok - ng) > 1:
mid = (ok + ng) // 2
if calchash(x, mid) == calchash(y, mid):
ok = mid
else:
ng = mid
if ele(x, ok) < ele(y, ok):
return -1
else:
return 1
p = sorted(list(range(n)), key = cmp_to_key(cmp))
x = p[k - 1]
ans = a[:x] + a[x + 1:]
print(*ans)