51nod1869 那些年,我們一起講的故事

2021-08-03 14:10:25 字數 1416 閱讀 2691

首先把trie的廣義字尾自動機建出來,那麼任選起點在trie上走就是在sam 的起點開始走。在sam上求出sg函式,先手必勝當且僅當兩個自動機上的節點的sg函式值不同。對第乙個sam的每個節點求出它在第二個sam上對應的合法的路徑條數【注意是路徑條數,不是節點個數】,然後按照求字典序k小的方法dfs就可以了。

注意幾個細節:

1.後繼狀態總數會爆long long,但是顯然總數只需要存到

k 。

2.乙個點可能有好幾條字母相同的出邊,也就是其實給的不是trie。

#include

#include

#include

using namespace std;

#define ll long long

const int maxn=500010;

int trans[maxn][26],fail[maxn],val[maxn],sg[maxn],trie[maxn][26],rt[2],

que[maxn],id[maxn],cnt[maxn],ord[2][maxn],vis[30],corr[maxn],

n[2],t1[2],tot;

ll size[maxn],sum[maxn],num[maxn][30],k;

int add(int x,int u,int fl)

if (!u) fail[nu]=rt[fl];

else}}

return nu;

}void build(int fl)

id[0]=rt[fl]=++tot;

que[hd=tl=1]=0;

while (hd<=tl)

}for (int i=0;i<=n[fl];i++) cnt[i]=0;

for (int i=rt[fl];i<=tot;i++) cnt[val[i]]++;

for (int i=1;i<=n[fl];i++) cnt[i]+=cnt[i-1];

for (int i=rt[fl];i<=tot;i++) ord[fl][cnt[val[i]]--]=i;

t1[fl]=tot-rt[fl]+1;

for (int i=t1[fl];i>=1;i--)}}

void dfs(int fl,int u,ll k)

dfs(1,rt[1],k);

return;

}k-=size[u];

for (int j=1;j<=26;j++)

if (sum[trans[u][j]]>=k)

else k-=sum[trans[u][j]];

}int main()

for (int i=t1[0];i>=1;i--)

}if (k>sum[1])

dfs(0,1,k);

}

那些年我們office 那些年我們一起吃過的桑葉泡

五一放假,和弟弟一起回了老家,回家之後立馬拿著小籃子出門,去尋覓讓我心心念念的桑葉泡,這個季節正是它們成熟的時候。桑葉泡是我們家這邊的叫法,其實它還有很多的別稱,比如桑葚 桑椹 桑椹子 桑蔗 桑棗 桑果 桑泡兒,桑椹等其性味甘寒,具有補肝益腎 生津潤燥 烏髮明目 利尿保健 消暑等功效。但我們吃它並不...

《那些年,我們一起追的女孩》 他們台灣那些年

此片能在大陸上映,刪減是難免的。其實本片在台灣報批時,一開始主管單位也連續幾次都給出了 限制級 的評定,最後,編劇兼導演九把刀親自登門做工作,才得以 輔導級 登堂入室 而在香港和澳門公映時,也被認定為僅次於 片的 iib 級 在馬來西亞和新加坡,則乾脆是 和16禁 放在沒有分級制的大陸,大動剪刀,必...

那些年我們一起清除的浮動

方法一 after main warp自己閉合浮動了,所以footer不用再清除浮動了 float left side 我也浮動了 float left 為了建立跨瀏覽器相容的同樣的盒模型布局,我們可以把原來的清除浮動的方法改良一下,採用偽類 before 和 after clearfix befo...