编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间
#20134 #2037. 弦论(another version) Time Limit Exceeded 14 26816 ms 207132 K Python 3 / 3.0 K admin 2024-12-08 18:13:11
import sys
sys.setrecursionlimit(200000)
class SuffixAutomaton:
    MAXS = 27
    N = 400005

    def __init__(self):
        self.tot = 1
        self.ru = [0] * self.N
        self.link = [0] * self.N
        self.maxlen = [0] * self.N
        self.endpos = [0] * self.N
        self.ch = [[0] * self.MAXS for _ in range(self.N)]
        self.last = 1

    def insert(self, w):
        if self.ch[self.last][w]:
            p = self.last
            x = self.ch[p][w]
            if self.maxlen[p] + 1 == self.maxlen[x]:
                self.endpos[x] += 1
                self.last = x
                return
            else:
                y = self.tot + 1
                self.tot += 1
                self.maxlen[y] = self.maxlen[p] + 1
                self.ch[y] = self.ch[x][:]
                while p and self.ch[p][w] == x:
                    self.ch[p][w] = y
                    p = self.link[p]
                self.link[y] = self.link[x]
                self.link[x] = y
                self.endpos[y] += 1
                self.last = y
                return

        z = self.tot + 1
        self.tot += 1
        p = self.last
        self.maxlen[z] = self.maxlen[self.last] + 1
        while p and not self.ch[p][w]:
            self.ch[p][w] = z
            p = self.link[p]
        if not p:
            self.link[z] = 1
        else:
            x = self.ch[p][w]
            if self.maxlen[p] + 1 == self.maxlen[x]:
                self.link[z] = x
            else:
                y = self.tot + 1
                self.tot += 1
                self.maxlen[y] = self.maxlen[p] + 1
                self.ch[y] = self.ch[x][:]
                while p and self.ch[p][w] == x:
                    self.ch[p][w] = y
                    p = self.link[p]
                self.link[y] = self.link[x]
                self.link[z] = self.link[x] = y
        self.endpos[z] += 1
        self.last = z

    def dfs(self, u):
        for v in self.p[u]:
            self.dfs(v)
            self.endpos[u] += self.endpos[v]

    def get_endpos(self):
        self.p = [[] for _ in range(self.N)]
        for i in range(2, self.tot + 1):
            self.p[self.link[i]].append(i)
        self.dfs(1)
        self.p = [[] for _ in range(self.N)]

def init():
    pass

def solve():
    sam = SuffixAutomaton()
    n, m = map(int, input().split())
    for _ in range(n):
        s = input().strip()
        sam.last = 1
        for char in s:
            sam.insert(ord(char) - ord('a'))
    sam.get_endpos()
    q = int(input())
    for _ in range(q):
        t = input().strip()
        tp = 1
        for i, char in enumerate(t):
            if not sam.ch[tp][ord(char) - ord('a')]:
                print(0)
                break
            tp = sam.ch[tp][ord(char) - ord('a')]
            if i + 1 == len(t):
                print(sam.endpos[tp])

if __name__ == "__main__":
    import sys
    init()
    solve()
子任务 #1
Time Limit Exceeded
得分:14
测试点 #1
Accepted
得分:100
用时:1470 ms
内存:190336 KiB

输入文件(0.in

4 10
a
aaa
aa
aaaa
4
a
aa
aaa
aaaa

答案文件(0.out

10
6
3
1

用户输出

10
6
3
1

系统信息

Exited with return code 0
测试点 #2
Accepted
得分:100
用时:1592 ms
内存:190436 KiB

输入文件(1.in

3 9
aaa
aba
aab
2
a
aa

答案文件(1.out

7
3

用户输出

7
3

系统信息

Exited with return code 0
测试点 #3
Time Limit Exceeded
得分:0
用时:2064 ms
内存:194736 KiB

输入文件(2.in

100 200000
xyhglfbxleieeancsaipttydqghtjmhblotpsuvytxynwaatqiezrilmgxdfqvizbndvsksxzvobqxthgkxvbvgo
<440065 bytes omitted>

答案文件(2.out

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
<59918 bytes omitted>
测试点 #4
Time Limit Exceeded
得分:0
用时:2063 ms
内存:186720 KiB

输入文件(3.in

100 200000
hlbcgcmaxdfioijoubnojpmrfohulumwirfarwovepnrwykzrzzfvorynjoxumvhsxpvabbpkryuruclumhmteew
<300119 bytes omitted>

答案文件(3.out

14
17
15
15
15
8
10
16
11
10
12
20
16
10
15
19
11
15
15
17
13
7
12
10
11
14
<75736 bytes omitted>
测试点 #5
Time Limit Exceeded
得分:0
用时:2020 ms
内存:194724 KiB

输入文件(5.in

100 200000
usnsprodkeljgibmantimnkpzguxfcuobzwxerknjjbccxqlcvunmmymjzlksccstncetmtqecmpxiuxhplazyat
<300119 bytes omitted>

答案文件(5.out

11
13
10
15
9
10
8
19
18
15
15
11
11
11
9
11
15
15
16
12
13
7
12
11
14
9
1
<75905 bytes omitted>
测试点 #6
Time Limit Exceeded
得分:0
用时:2064 ms
内存:186608 KiB

输入文件(6.in

100 200000
xobjjfjmjhmgsxasjmbeigsuatjqhaenqcnwjzopjpodnkowiqzlycqbxjqhqrrcqpafuvnyidgbcheftpxttqgo
<298506 bytes omitted>

答案文件(6.out

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
<200 bytes omitted>
测试点 #7
Time Limit Exceeded
得分:0
用时:2020 ms
内存:186648 KiB

输入文件(7.in

100 200000
ssiwurakptykaljovijyaoopdspzxayggnhfsubqsrpwodufsvwzmpabkgxryesanszczewjystsyftjkspenbre
<292658 bytes omitted>

答案文件(7.out

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
<200 bytes omitted>
测试点 #8
Time Limit Exceeded
得分:0
用时:2018 ms
内存:188076 KiB

输入文件(8.in

1 200000
higlcljtjjezelczszusltndbahanudplnftpxjkyxcapghfkgsvyrclugymaqrrakvnxscwhvlmqqqdmuojlysapv
<349915 bytes omitted>

答案文件(8.out

1
测试点 #9
Time Limit Exceeded
得分:0
用时:2063 ms
内存:195996 KiB

输入文件(10.in

1 200000
aidiygcnhnlugueymginpzbrpkygsddmdamadrrqskbclnetprrwazizyiqpngvzlavrakeiszfflbuieywlnxfcdy
<349935 bytes omitted>

答案文件(10.out

0
测试点 #10
Time Limit Exceeded
得分:0
用时:2019 ms
内存:194680 KiB

输入文件(13.in

100 200000
otyctwfxuvhyqqsghwqihvwquekwvsrkbgwayazmcepjgccnugcaexvoavauiviwenyrdrsmrekmsidscuevfogt
<202317 bytes omitted>

答案文件(13.out

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
<200 bytes omitted>
测试点 #11
Time Limit Exceeded
得分:0
用时:2016 ms
内存:182980 KiB

输入文件(14.in

100 200000
hyzlqvwoyvjgezzmzrzwsbiibebexgaxjlccviwtfcpgzwmbuddlvhruxmndjdgyqxiqgtfopezoxfyndwhbclhx
<600120 bytes omitted>

答案文件(14.out

303
290
284
316
314
288
244
307
316
288
275
287
304
297
292
286
304
308
294
289

<549962 bytes omitted>
测试点 #12
Time Limit Exceeded
得分:0
用时:2019 ms
内存:192428 KiB

输入文件(15.in

100 200000
hhssofajgkxkqrlkxqrvkkotbaiypfeglpwfltwpryovffwnfdaetqaelpvdwyvuabzjxiudfkvvehoqwhpqbzhn
<800120 bytes omitted>

答案文件(15.out

9659
9659
9659
9659
9659
9659
9659
9659
9659
9659
9659
9659
9659
9659
9659
9659
9659
<1199900 bytes omitted>
测试点 #13
Time Limit Exceeded
得分:0
用时:2020 ms
内存:147152 KiB

输入文件(16.in

200000 200000
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
<1199923 bytes omitted>

答案文件(16.out

200000
200000
200000
200000
200000
200000
200000
200000
200000
200000
200000
200000
2000
<1599900 bytes omitted>
测试点 #14
Runtime Error
得分:0
用时:1368 ms
内存:207132 KiB

输入文件(17.in

1 200000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
<799920 bytes omitted>

答案文件(17.out

200000
200000
200000
200000
200000
200000
200000
200000
200000
200000
200000
200000
2000
<1599900 bytes omitted>

系统信息

Killed: Segmentation fault