GDKOI模拟 Manufactoria

来源:互联网 发布:黑魂三捏脸数据女 编辑:程序博客网 时间:2024/05/22 12:00

化简后题意

给定三个用图表示的自动机。自动机上的边分为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中的任意位置。

0 0
原创粉丝点击