随笔分类 - 分治—二分
摘要:首先考虑只满足第一个条件,二分答案,把过期时间加上mid之后的2n个时间离散,老鼠拆成每个时间的,第i个时间第j个老鼠为id[i][j],连接(s,i,p[i]),对于离散后时间(g[j 1]~g[j])在i奶酪的时间区间里的ij,连接(i,id,老鼠速度\ 时间段长),然后连(id,t,inf),
阅读全文
摘要:洛谷上有个点死活卡不过去,不知道是哪里写丑了orz 参考:https://www.cnblogs.com/ditoly/p/BZOJ4200.html 从上往下dp,设f为不向左右走直接上去的值,g为先向左右走一步再上去,至于找每个方向上的点,分别按x,y,x+y,x y排序然后二分即可 然后建出左
阅读全文
摘要:最大值最小,所以考虑二分 |Σaij Σbij| include include include using namespace std; const int N=505; int n,m,ll,rr,a[N][N],sh[N],sl[N],h[N],cnt,le[N],d[N],s,t; stru
阅读全文
摘要:SA的话t==0直接预处理出每个后缀的不同串贡献二分即可,然后t==1就按字典序枚举后缀,然后跳右端点计算和当前后缀的前缀相同的子串个数,直到第k个 不过bzoj上会T cpp include include include using namespace std; const int N=1000
阅读全文
摘要:把三个串加上ASCII大于z的分隔符连起来,然后求SA 显然每个相同子串都是一个后缀的前缀,所以枚举s1的每个后缀的最长和s2相同的前缀串(直接在排序后的数组里挨个找,最近的两个分别属于s1和s2的后缀的height一定是最长符合要求的前缀),然后判断一下这个子串里最早出现的和s3相同的子串的位置,
阅读全文
摘要:总是犯低级错误,st表都能写错…… 正反分别做一遍SA,预处理st表方便查询lcp,然后处理a[i]表示前i个后缀一共有多少个本质不同的子串,这里的子串是按字典序的,所以询问的时候直接在a上二分排名就能得到询问区间,然后用正反st表查lcp即可 cpp include include include
阅读全文
摘要:把模板串建一个广义SAM 然后在线查询,每次在SAM上预处理出一个a[i]表示i位置向前最多能匹配多长的模板串 二分答案L,dp判断,设f[i]为·~i有几个匹配,转移显然是f[i]=max{f[i 1],f[j]+i j(i a[i]=L\ 0.9
阅读全文
摘要:先加入未出现字符间隔把n个串连起来,注意如果串开的char这个间隔字符不能溢出,把这个接起来的串跑SA,二分答案k,判断的时候把连续一段he =k的分成一组,然后看着一段是否包含了 n/2的串的后缀。 统计是否出现这里可以用时间戳优化visit数组,就不用每次memset了 输出答案的时候和二分判断
阅读全文
摘要:差分,然后二分长度mid,判断是把height按照min不小于mid分组,取最大最小的sa位置看是否 =mid即可,注意差分后最后答案要+1
阅读全文
摘要:用read()会挂 二分半径,显然最优的是所有原都用这个最小半径,然后2 SAT把相交的圆建图,跑tarjan判一下可行性即可
阅读全文
摘要:驸马不必巧言讲
现有凭据在公堂
阅读全文
摘要:适才叫咱盟誓愿
你也对天就表一番
阅读全文
摘要:終わりも見えない道に寝そべって
ぐらりぐらり崩れちゃうわ
阅读全文
摘要:麟儿哪有神送到
积德才生玉树苗
阅读全文

浙公网安备 33010602011771号