把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end
摘要: CF1473A 显然要么是初始整个序列就都小于$d$,否则大于$d$的需要变成最小值加上次小值。判断一下即可。 code: #include<cstdio> #include<algorithm> using namespace std; int n,m,k,x,y,z,t,a[139],d,max 阅读全文
posted @ 2021-02-03 22:49 275307894a 阅读(61) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 第一道AC自动机优化dp 考虑$dp$方程式怎么列,会发现无论怎么平凡的设法都会有后效性。因为是匹配,所以考虑在AC自动机上设状态。 设$dp_{i,j}$表示匹配到$i$,在AC自动机上为$j$点的最大值。则每个往后转移即可。 注意可以预处理出每个点跳fail能得到的权值。 时间复杂度 阅读全文
posted @ 2021-02-03 18:31 275307894a 阅读(61) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 因为上一题单串匹配是KMP+栈,所以这道题多串匹配考虑AC自动机+栈。 开一个栈记录当前没有被弹出的字符。同时记录匹配到了那个节点,在AC自动机上跑匹配即可。 注意有一个方法就是字符串结束标记上直接打上字符串长度这样就不用那么烦。 时间复杂度$O(|S|+\sum{|T|})$ 代码实现 阅读全文
posted @ 2021-02-03 15:42 275307894a 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 这里给三个板子做一个总结 简单版 AC自动机就是KMP+Trie,fail指针在多模式串之间跳跃来进行匹配。 fail指针有一种很妙的写法: inline void bfs(){ register int i,tot; for(i=0;i<26;i++)if(f[0].son[i]) q.push( 阅读全文
posted @ 2021-02-03 13:54 275307894a 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 题目这个删掉后重新接成字符串很难处理,所以考虑用栈来衔接。 那么可以记录前一个匹配到哪里,然后就可以继续匹配。 时间复杂度$O(n+m)$ 代码实现: #include<cstdio> #include<cstring> using namespace std; int n,m,k,x, 阅读全文
posted @ 2021-02-03 07:55 275307894a 阅读(51) 评论(0) 推荐(0) 编辑
浏览器标题切换
浏览器标题切换end