把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end
上一页 1 ··· 30 31 32 33 34 35 36 37 38 ··· 45 下一页
摘要: 题面传送门 实在写不动AC自动机于是跑来写dp了。 考虑这个怎么转化。 首先可以转化为求最大边数然后加一。 左右端点一定有一种最优情况不是叶子节点,因为如果是叶子节点那么叶子节点上面那个也行。 之后计算一下每个点的度,每个点的贡献是度-1,即减去与其父节点的连边的重复贡献。 然而你会发现根节点多减了 阅读全文
posted @ 2021-02-04 19:19 275307894a 阅读(36) 评论(0) 推荐(0)
摘要: 题面传送门 首先看到题面中保证$n$为偶数,所以可以从这一个方面来推。 稍微用初一上的内容推一下就可以发现:对于一次取得升序序列$a$,其权值为$\sum\limits_{2}+1}-\sum\limits_{\frac{2}}$ 那么一定是在满足每种颜色$k$个的颜色下,最大的$\frac{2}$ 阅读全文
posted @ 2021-02-04 17:57 275307894a 阅读(106) 评论(0) 推荐(0)
摘要: 题面传送门 话说我居然连快读都没加就过了。 容易想到莫队。 首先可以看出一个节点增/删有两个贡献:区间比它小的数的个数和区间比它大的数的和。 容易想到可以用树状数组维护,但是这个是$O(n\sqrt nlogw)$的,不是很优秀。 考虑莫队二次离线,那么分开算贡献即可。 注意离线时用域值分块可以做到 阅读全文
posted @ 2021-02-04 13:30 275307894a 阅读(78) 评论(0) 推荐(0)
摘要: 题面传送门 AC自动机蛮好的一道题,需要有一定对AC自动机的理解。 首先把所有字符串扔到AC自动机里面去。然后求出fail指针。 对于每个询问暴力匹配肯定是不行的,考虑怎么转化。 可以发现如果把fail指针抽出来,那么一个节点的子树内所有节点都能与这个节点匹配。 那么就可以把询问离线然后dfs搞。 阅读全文
posted @ 2021-02-04 10:53 275307894a 阅读(56) 评论(0) 推荐(0)
摘要: 题面传送门 这个东西很难优化,考虑用另一种方法计算。 考虑枚举断点,左边为$s1$,右边为$s2$。左边直接AC自动机匹配即可。但是右边很难搞。 发现右边要匹配前缀不好处理,那么就让模式串和文本串同时反序,就可以变成好搞的后缀了。 时间复杂度$O(n+\sum{|S|})$ 代码实现: #inclu 阅读全文
posted @ 2021-02-04 09:30 275307894a 阅读(56) 评论(0) 推荐(0)
摘要: 题面传送门 考虑一下,会发现这个东西不太好算,考虑容斥一下,用总数减去一个都没有出现的个数。 那么就可以设$dp_{i,j}$表示匹配到$i$,AC自动机上匹配到$j$的方案数。预处理一下就可以做了。 时间复杂度$O(m\sum{|S|})$ 代码实现: #include<cstdio> #incl 阅读全文
posted @ 2021-02-04 08:19 275307894a 阅读(56) 评论(0) 推荐(0)
摘要: 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 阅读(66) 评论(0) 推荐(0)
摘要: 题面传送门 第一道AC自动机优化dp 考虑$dp$方程式怎么列,会发现无论怎么平凡的设法都会有后效性。因为是匹配,所以考虑在AC自动机上设状态。 设$dp_{i,j}$表示匹配到$i$,在AC自动机上为$j$点的最大值。则每个往后转移即可。 注意可以预处理出每个点跳fail能得到的权值。 时间复杂度 阅读全文
posted @ 2021-02-03 18:31 275307894a 阅读(66) 评论(0) 推荐(0)
摘要: 题面传送门 因为上一题单串匹配是KMP+栈,所以这道题多串匹配考虑AC自动机+栈。 开一个栈记录当前没有被弹出的字符。同时记录匹配到了那个节点,在AC自动机上跑匹配即可。 注意有一个方法就是字符串结束标记上直接打上字符串长度这样就不用那么烦。 时间复杂度$O(|S|+\sum{|T|})$ 代码实现 阅读全文
posted @ 2021-02-03 15:42 275307894a 阅读(56) 评论(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 阅读(63) 评论(0) 推荐(0)
摘要: 题面传送门 题目这个删掉后重新接成字符串很难处理,所以考虑用栈来衔接。 那么可以记录前一个匹配到哪里,然后就可以继续匹配。 时间复杂度$O(n+m)$ 代码实现: #include<cstdio> #include<cstring> using namespace std; int n,m,k,x, 阅读全文
posted @ 2021-02-03 07:55 275307894a 阅读(58) 评论(0) 推荐(0)
摘要: 题面传送门 没有修改,考虑莫队,容易想到一个移动指针时用树状数组维护的$O(n\sqrt nlogn)$的方法,但是过不去。 这种情况就可以考虑莫队二次离线,把询问拆分,分类讨论一下即可。 注意这道题需要维护正反两个离线。注意卡常。注意离线那个树状数组要用域值分块来做到$O(1)$查询。 哦还有这道 阅读全文
posted @ 2021-02-02 19:26 275307894a 阅读(81) 评论(0) 推荐(0)
摘要: 题面传送门 考虑一般的莫队。复杂度$O(n\sqrt nC_{14}^{7})$ 这里面转移的复杂度略微有点大。 考虑$[l,r]\(转移到\)[l,r+1]$的贡献。即$a_{r+1}\(对于\)[l,r]$的贡献。 这个东西可以差分,变成$[1,r]-[1,l-1]$,然后就可以统一计算了。 剩 阅读全文
posted @ 2021-02-02 13:49 275307894a 阅读(80) 评论(0) 推荐(0)
摘要: 题面传送门 题解区居然没有一个写理论复杂度最优的算法的。那我就来讲一下。 首先显然有一个结论:对于一个$b_i$,和小于$z-b_i$且最大的$a_i$连线时最优的。因为这样可以为大于当前$b_i$的提供更优条件。 同时没有修改就可以考虑离线算法,比如莫队。 莫队的增加时就是把当前$b_i$按照上面 阅读全文
posted @ 2021-02-01 20:46 275307894a 阅读(257) 评论(0) 推荐(0)
摘要: 题面传送门 闲着没事开始清任务计划。 显然单调栈处理出一条列当前的最高的点,然后单调栈向左右拓展找到第一个小于的点,细节处理一下即可。 时间复杂度$O(n^2)$ 代码实现: #include<cstdio> #define min(a,b) ((a)<(b)?(a):(b)) #define ma 阅读全文
posted @ 2021-02-01 13:45 275307894a 阅读(60) 评论(0) 推荐(0)
摘要: 题面传送门 因为不会写hard所以滚回来写medium了。 考虑dp,设$dp_{i,j}$为到$j$,分了$i$段的最大价值,有显然式子$dp_{i,j}=\max_{dp_{i-1,k}+w(k+1,j)}$ 这个是$O(n2k)$的,不能过。 考虑优化,看到后面那个范围很小,那么开个桶记录即可 阅读全文
posted @ 2021-02-01 12:29 275307894a 阅读(86) 评论(0) 推荐(0)
摘要: 题面传送门 考虑前缀和后转化为区间最长相等数距离。 那么可以回滚莫队解决。 回滚莫队是什么呢?适用于一些只能增加而很难减少的情况。 将莫队左端点在一个块时,右端点升序排序,同时维护最左和最右即可。 代码实现: #include<cstdio> #include<algorithm> #include 阅读全文
posted @ 2021-01-31 19:19 275307894a 阅读(59) 评论(0) 推荐(0)
摘要: 题面传送门 一看到两条路线不交我们就可以想到容斥。 两点间的路径条数显然可以$O(n^2)$递推出来。问题是怎么容斥。 考虑如果两条路线不交,那么一定一只乌龟开始第一步向上走,一只向右走。 同理,在终点时一定有一只乌龟最后一步向右走,另一只向上走。 所以变成了四个点之间的问题。 考虑如果$(1,2) 阅读全文
posted @ 2021-01-31 15:43 275307894a 阅读(48) 评论(0) 推荐(0)
该文被密码保护。 阅读全文
posted @ 2021-01-31 14:10 275307894a 阅读(36) 评论(0) 推荐(0)
摘要: 题面传送门 挺好的一道题。 首先一个很明显的贪心:先加后乘,这样一定最大。 然后又注意到,在最大子段和为正时,第二个操作的使用次数不会超过$logs$次。 所以可以枚举第二个操作的执行次数。 那么第一个操作显然是在刚好的时候最优,这个用二分可以轻松解决。 时间复杂度$O(nlog^2s)$ 代码实现 阅读全文
posted @ 2021-01-31 12:24 275307894a 阅读(76) 评论(0) 推荐(0)
摘要: 题面传送门 一道题数据范围那么小肯定考虑搜索。 但是这个数据范围稍微偏大了一点。 所以就可以折半搜索。\(O(3^{\frac{n}{2}})n\) 但是这样卡不进去。 我们的map一般是这么写的 ans+=f[i][k-z]; 然后我换成这么写直接300ms if(f[i].count(k-z)) 阅读全文
posted @ 2021-01-29 22:31 275307894a 阅读(81) 评论(0) 推荐(0)
摘要: 题面传送门 蛮好的一道题,可惜我不会证( 有回文串那么考虑Manacher 首先手玩一下就能发现,如果在右半边更新答案,那么当前答案右端点一定过当前右端点 然后再手玩就能发现,如果当前左端点过当前最大中点,那么就是可以更新答案的。这样肯定最大,然后就完了。 代码实现: #include<cstdio 阅读全文
posted @ 2021-01-29 20:59 275307894a 阅读(46) 评论(0) 推荐(0)
摘要: 题面传送门 树上问题没有修改,考虑倍增。 然而发现如果暴力合并线性基要$O(nlognlog2w+qlognlog2w)$铁定过不去。 考虑优化。 可以发现线性基有一个很优秀的性质就是两个有重叠部分的线性基合并是没有影响的。 那么可以用st表的思虑拿来合并了,复杂度降到$O(nlognlog2w+q 阅读全文
posted @ 2021-01-23 21:59 275307894a 阅读(69) 评论(0) 推荐(0)
摘要: 题面传送门 发现这道题主要不是思维难,而是高精难打。还难卡常 $2i$的显然很好处理,考虑$2i+1$怎么做 首先设两个分支为$2k-1,2k$,那么会衍生出三个分支$k-1,k,k$容易发现仍然只有两个本质不同。 那么只要暴力递归下去判个重即可。 但是问题是这样$O(Tlog3n)$过不去。 考虑 阅读全文
posted @ 2021-01-23 19:28 275307894a 阅读(37) 评论(0) 推荐(0)
摘要: 题面传送门 这题十分卡精度,我开到了$10^{-12}$才过去。 主要有两种做法。 两种做法的核心都是一样的,就是求出相邻两棵树在什么时候一样高。建权值为同样高时间的边,然后找出最大的连通块使的边权相同。 但是在找的过程中我们发现有一些树可能初始高度一样且生长速度一样,那么这些树在任何时候都相同高。 阅读全文
posted @ 2021-01-22 22:21 275307894a 阅读(89) 评论(0) 推荐(0)
上一页 1 ··· 30 31 32 33 34 35 36 37 38 ··· 45 下一页
浏览器标题切换
浏览器标题切换end