GDKOI模擬 Manufactoria

化簡後題意

給定三個用圖表示的自動機。自動機上的邊分爲a,b,null 三種,對於當前字符串的位置i ,假如Si=a 則走a 邊,Si=b 則走b 邊,若爲空則走null 邊。設三個自動機爲A,B,C ,從中保留最少的自動機,設爲集合T ,使得T 的可識別字符串集合等於ABC 可識別字符串集合。值得注意的是,字符串的長度限制是L ,也就是說,假如存在一個字符串S ,可被T 識別,而不能被ABC 識別,但|S|>L ,依然視爲不存在這樣的S 。並且保證字符串的每個字符都是ab

自動機的大小100
L2311

題解

f(x,y,z) 表示是否可能存在某個字符串,使得自動機A 走到節點xBy ,C 走到z 。特別地,假如某個節點不存在某條轉移邊,那麼設其轉移到0節點,並且對於終結節點T ,其三種轉移都轉移回自己。

很顯然地,由於自動機大小不超過100 ,那麼f(x,y,z) 只有N3=106 種狀態。

那麼我們可以寬搜出所有的f(x,y,z) ,轉移就是:假設當前走到(x,y,z) ,那麼我們枚舉下一步走的是a 還是b ,然後將x,y,z 同時在自動機上走一步。很特殊的是,我們字符串可能在這一位終結,那麼我們需要將x,y,z 不停地沿null 轉移就好了。而且注意到題目中對於字符串長度有L 的限制,也就是說對於f(x,y,z) 的擴展,假如已經擴展了L 步,我們就不能繼續擴展了。

現在我們已經得到了f(x,y,z) ,考慮怎麼得到答案。

先假設T=AB 。其他同理。那麼就是說不能出現A,B 可以識別的字符串,而C 不能識別。那麼就相當於判斷f(Ta,Tb,0) 是否存在,若存在則不合法。

假如答案是1。假設T=A 。那麼相當於不能出現A 可以識別而B,C 不能識別的字符串。那麼我們可以枚舉是B 或是C 無法識別,假設是C ,相當於判斷f(Ta,pos,0) 是否存在,posB 中的任意位置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章