SCOI2012 喵星球上的點名

2021-10-02 10:47:58 字數 1172 閱讀 9215

點此看題

0x01 ac自動機

如果字符集沒有這麼大的話,就是ac

\text

ac自動機的板題。我們可以開map

mapma

p存轉移,然後就完了。

寫了之後對map

mapma

p的理解會有所提公升吧,雖然是過不了luo

gu

luogu

luog

u的加強版,還是貼個**:

#include

#include

#include

#include

#include

using

namespace std;

const

int m =

1000005

;int

read()

int n,m,len,a1[m]

,a2[m]

;vector<

int> a[m]

;struct automaton

void

ins(

int id)

ed[now]

.push_back

(id);}

void

build()

}}void

ask(

int x)

}while

(!q.

empty()

)}}ac;

intmain()

for(

int i=

1;i<=m;i++

) ac.

build()

;for

(int i=

1;i<=n;i++

) ac.

ask(i)

;for

(int i=

1;i<=m;i++

)printf

("%d\n"

,a1[i]);

for(

int i=

1;i<=n;i++

)printf

("%d "

,a2[i]);

}

0x02 字尾陣列

這個方法以後再補qwq

SCOI2012 喵星球上的點名

有n個串,代表n個人的姓氏和名字,都是用很多個數字表示的,比如我姓1,2,3,4,名4,5,6,7。然後有m個點名串,如果點到了某個人的姓或名裡面的某一串,那個人就被點到,不過乙個人在乙個點名串中只能被點一次。比如點名串是2,3,4,我的姓中含有2,3,4,那麼我就會被叫到。求每個學生分別被叫到多少...

SCOI2012 喵星球上的點名

給出n個模式串,m個文字串,每個模式串由兩部分組成,我們認為乙個模式串被乙個文字串包含只要這個文字串包含它的兩部分中的其中一部分的子串。求每個文字串包含多少個模式串,每個模式串又被多少個文字串包含。1 n 20000,1 m 50000,模式串總長和文字串的總長分別不超過100000 保證模式串和文...

SCOI2012 喵星球上的點名

對於第乙個詢問,對於姓名串建廣義字尾自動機,那麼我們對於插入乙隻喵的姓名串,要將這兩個 姓和名 串的所有字串位置打標記,怎麼搞呢,其實可以直接插入暴力向上跳,複雜度的話 對於乙個串假設長度為x,那麼插入複雜度是min x x,x n 而最多只有n x個這樣的串,算一下總的複雜度上界是n根號的。然後就...