第一字符串(Trie&&Topology)

来源:互联网 发布:java给app提供接口 编辑:程序博客网 时间:2024/05/29 04:36

Bessie最近在玩字符串。她发现通过改变字母的顺序可以使一些字符串排在其他所有的字符串之前(按字典序从小到大排序)。

比如说,Bessie找到了对于字符串”omm”,”moo”,”mom”,和”ommnom”,她可以用标准的字母表把”mom”排在最前面,也可以用字母表”abcdefghijklonmpqrstuvwxyz”把”omm”排在最前面。但是,Bessie不能找出一个方案使”moo”或”ommnom”排在最前面。

请你帮助Bessie找出哪些字符串可以通过改变字母表来让它们排在最前面。要计算字符串X是否字典序比字符串Y小,要找到两个字符串最先出现的不同字符的位置,j。如果没有这样的位置存在,那么如果X的长度比Y短,则X字典序小于Y。否则,如果X[j]在字母表中比Y[j]早出现,那么X字典序小于Y。

输入N与N个串 , N<=30000 , Σni=1|Si|<=300000

输出
第1行,求表示能排在字典序最前面的字符串总数K。

第2..K+1行,每行包括能排在字典序最前面的字符串,输出顺序按照输入给出的顺序。

思路很直观:我们需要判断一个串是否能排第一,那么必然要确定某些字母的先后顺序,这些顺序可以用图来表示,图中如果存在矛盾则此串非法。
如何构图? 考虑用trie, 先将所有串插入trie,然后逐一判断,假设对于子串i,它在trie上走点x,那么点x的字母必须要比fa[x]的所有儿子代表的字母前,于是我们从x代表的字母向另一些字母连边。最后跑一次拓扑,若存在环则不合法。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 发票号码和机打号码不一致怎么办 交电费的本子弄丢了怎么办 快递正在派件中发现地址错了怎么办 快递当天送达当天签收还算延怎么办 深圳国税公众号预约取号公司怎么办 社保买了停了2年怎么办 qq号被冻结申请不回来了怎么办 qq号被冻结 手机密保忘了怎么办 微信账号封了2天怎么办 买qq号被申诉找回了怎么办 收到了京东白条的催款通知单怎么办 成都买房社保不够两年怎么办18年 电话号码给人设置成骚扰电话怎么办 找不到领导电话不接短信不回怎么办 微信账号被别人手机号冻结了怎么办 微信冻结了手机号也让人换了怎么办 顺丰快递拒收退回丢件了怎么办 京东买东西快递电话没有听到怎么办 在京东购物自己电话号输错了怎么办 北京房子卖了户口没地方迁怎么办 微信弄丢了微信密码找不到了怎么办 微信背人用过找不到密码怎么办 超市的微信支付宝收付款怎么办 办理联华超市的会员储蓄卡怎么办 卡杰文具密码本如果忘记密码怎么办 火狐浏览器阻止要访问的网页怎么办 点我达被永久停用了怎么办 刚下的软件点开系统显示停用怎么办 红酒洋酒啤酒一起喝胃不舒服怎么办 儿子13岁初一不想读书了怎么办 微信不小心点了注册新账号怎么办 在京东买东西商家不发货怎么办 在京东买东西坏了商家不退货怎么办 苯扎氯铵溶液不小心喝了一口怎么办 苯扎氯铵溶液没有稀释就用了怎么办 牛油果切开了但是没熟怎么办 手机安装程序时解析包出错怎么办 因俩人不合适分手了很难受怎么办 中考结束后成绩不好的该怎么办 在京东自营药房买药没有处方怎么办 平安普惠账号不可以注销怎么办?