【CodeVS 2083】Cryptcowgraphy 解密牛语

4 篇文章 0 订阅
1 篇文章 0 订阅

这道题真是敲得我蛋都碎了 碎了一地啊

直接搜很明显是不可以的 因为其实弄个什么3次方复杂度绝对炸

一开始的判断

1. 由于添加的COW是一起的,因此给出的字符串的字符个数应该等于47(目标字符串的长度)+3*k。如果不满足就可直接判断无解。
2. 除了COW三个字符外,其他的字符的个数应该和目标串相一致。如果不一致也可直接判断无解。

然后讲一下牛逼的剪枝 真佩服那些想出来的

1.字符串判重。

2.先枚举O,再枚举C,W。枚举W时从后往前枚举。

3.对于所有的C,O,W字母可以将字符串切成好几段,但是无论我们怎么交换C-O之间和O-W之间的字符串,这些小段字符串是不会被分开的。所以对于每一个状态我们判断所有C,O,W切成的小段是否在目标串中出现过。这是非常厉害的剪枝。

4.剪枝3只是判断某些字符串小段是否在目标串中出现过,还可以对这些小段的第一段和最后一段加强限制。即当前串的最小的结尾字符的后一个字符是C的前缀必须是目标串的前缀,当前串最小的开头字符的前一个字符是W的后缀必须是目标串的后缀。这也是非常重要的剪枝。

大概这样打就没问题了吧 然而可能我写搓了还是判重不够快什么的 (我还写了trie树的啊。。)

学学别人怎么打吧 代码就别看我的了

因为实在有两个点不行 弄了个搜索次数上线搞过去了。唔



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值