結果

問題 No.515 典型LCP
ユーザー ayaoniayaoni
提出日時 2021-08-14 14:04:01
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 866 ms / 1,000 ms
コード長 1,589 bytes
コンパイル時間 215 ms
コンパイル使用メモリ 81,904 KB
実行使用メモリ 109,164 KB
最終ジャッジ日時 2024-10-05 07:20:02
合計ジャッジ時間 6,170 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 866 ms
109,164 KB
testcase_01 AC 733 ms
108,684 KB
testcase_02 AC 280 ms
77,120 KB
testcase_03 AC 34 ms
52,460 KB
testcase_04 AC 33 ms
53,624 KB
testcase_05 AC 166 ms
74,508 KB
testcase_06 AC 205 ms
76,856 KB
testcase_07 AC 191 ms
76,556 KB
testcase_08 AC 231 ms
76,868 KB
testcase_09 AC 206 ms
77,572 KB
testcase_10 AC 219 ms
77,372 KB
testcase_11 AC 213 ms
77,452 KB
testcase_12 AC 210 ms
77,396 KB
testcase_13 AC 182 ms
76,972 KB
testcase_14 AC 81 ms
76,796 KB
testcase_15 AC 151 ms
72,496 KB
testcase_16 AC 156 ms
73,076 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
def I(): return int(sys.stdin.readline().rstrip())
def MI(): return map(int,sys.stdin.readline().rstrip().split())
def LI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def LI2(): return list(map(int,sys.stdin.readline().rstrip()))
def S(): return sys.stdin.readline().rstrip()
def LS(): return list(sys.stdin.readline().rstrip().split())
def LS2(): return list(sys.stdin.readline().rstrip())


N = I()
words = [(S(),i) for i in range(N)]
words.sort()

dic = {}
for i in range(N):
    dic[words[i][1]] = i

LCP = [0]*(N-1)
for i in range(N-1):
    count = 0
    for w0,w1 in zip(words[i][0],words[i+1][0]):
        if w0 == w1:
            count += 1
        else:
            break
    LCP[i] = count


class sparse_table():
    def __init__(self,A,func):  # 0-index
        self.N = len(A)
        self.func = func
        self.e = self.N.bit_length()-1
        self.table = [[0]*self.N for _ in range(self.e+1)]
        self.table[0] = A[:]
        for j in range(self.e):
            k = 1 << j
            for i in range(self.N-2*k+1):
                self.table[j+1][i] = self.func(self.table[j][i],self.table[j][i+k])

    def query(self,l,r):  # [l,r)
        f = (r-l).bit_length()-1
        return self.func(self.table[f][l],self.table[f][r-(1<<f)])


ST = sparse_table(LCP,min)
M,x,d = MI()
ans = 0
for _ in range(M):
    i = x//(N-1)+1
    j = x%(N-1)+1
    if i > j:
        i,j = j,i
    else:
        j += 1
    di = dic[i-1]
    dj = dic[j-1]
    if di > dj:
        di,dj = dj,di
    ans += ST.query(di,dj)
    x = (x+d) % (N*(N-1))

print(ans)
0