09 2019 档案
摘要:题意:有一个长度为n的01序列,你可以移动k次,每次将一个数移到任意一个位置,求经过操作后区间连续最大的连续0的个数。 “移动”操作看似情况很复杂,不好讨论,但其实无非就两种情况: 一、移动的是1:显然最优的策略是将1移动到最边上(相当于“移走”),目的是将两段连续的0合并。 二、移动的是0:最优策
阅读全文
摘要:题意:统计一段字符串中形如UVU的子串个数(其中V的长度固定为g)。 问题等价于求满足$g+1\leqslant |j-i|\leqslant g+LCP(i,j)$的后缀(i,j)的对数,即$\sum\limits_{i<j}[g+1\leqslant |j-i|\leqslant g+LCP(i
阅读全文
摘要:题意:有一个长度为n的序列,让你把它分成k段,段内元素取or,段间取and,求能够得到的最大值。 这个算法是我和xz场上yy出来的,然而时间不够了没写出来,而且时间复杂度是$O(nlogn+nlogA)$的比官方题解都要低...(但是常数大了点) 设最大值为ans,我们假设S&ans=S,看看S能否
阅读全文
摘要:题意:给你一个长度为n的字符串和m组询问,每组询问给出l,r,k,求s[l,r]的第k次出现的左端点。 解法一: 求出后缀数组,按照排名建主席树,对于每组询问二分或倍增找出主席树上所对应的的左右端点,求第k大的下标即可。 解法二: 建立后缀自动机,对后缀树(fail树)作线段树合并可得到每个结点包含
阅读全文
摘要:题意:给你n个字符串,求出在超过一半的字符串中出现的所有子串中最长的子串,按字典序输出。 这道题算是我的一个黑历史了吧,以前我的做法是对这n个字符串建广义后缀自动机,然后在自动机上dfs,交上去AC了,然而事后发现算法假了,出了个数据把自己给hack了... 之前写的太烂了,决定重写一遍。 正确的操
阅读全文
摘要:1.字符串哈希: 1 ll H(ll* h,int l,int r) {return h[r+1]-h[l]*p[r-l+1];} 2 void getH(char* s,ll* h,int n) {h[0]=0; for(int i=1; i<=n; ++i)h[i]=h[i-1]*M+s[i-1
阅读全文
摘要:自己整理出来的模板 存在的问题: 1.多项式求逆常数过大(尤其是浮点数FFT) 2.log只支持f[0]=1的情况,exp只支持f[0]=0的情况 有待进一步修改和完善 FFT: 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef l
阅读全文

浙公网安备 33010602011771号