「WC2016」论战捆竹竿】的更多相关文章

「WC2016」论战捆竹竿 前置知识 参考资料:<论战捆竹竿解题报告-王鉴浩>,<字符串算法选讲-金策>. Border&Period 若前缀 \(pre(s,x)​\) 与后缀 \(suf(s,n-x-1)​\) 相等,则 \(pre(s, x)​\) 是 \(s​\) 的一个 \(\text{Border}​\). \(x​\) 是 \(s​\) 的一个周期 (\(\text{Preiod}​\)) 满足 \(s[i]=s[i+x],\forall{1\leq i\le…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ172.html 题解 首先,这个问题显然是个背包问题. 然后,可以证明:一个字符串的 border 长度可以划分成 $O(log |S|)$ 个等差数列. (以下图片摘自  金策 - <字符串算法选讲>) 由于长度 n 可以随便取,所以我们可以在对n取模的意义下做背包,设 dis[i] 为 占用背包容量%n = i 时至少要占用多少背包容量,那么直接建 $n^2$ 条边跑一下 dijkstra 就可以…
传送门 首先这个题目显然就是先求出所有的 \(border\),问题转化成一个可行性背包的问题 一个方法就是同余类最短路,裸跑 \(30\) 分,加优化 \(50\) 分 首先有个性质 \(border\) 分成的等差数列的个数不超过 \(log\) 和回文树的性质的证明类似瞎画图一下就行了 我们注意到可以一个一个等差数列的更新最短路 要做到这个,必须能从之前的等差数列的模数 \(n\) 转移到当前等差数列的 \(x\) 假设模 \(n\) 的最短路为 \(f\),模 \(x\) 的为 \(g\…
第二次在bzoj跑进前十竟然是因为在UOJ卡常致死 首先这个题其实就是一个无限背包 一般做法是同余最短路,就是bzoj2118: 墨墨的等式可以拿到30分的好成绩 背包是个卷积就分治FFT优化那么下面20也没问题了 官方做法是大力bitset优化背包并且嘲讽了一波这个做法 再往后需要一个性质参见鏼爷的PPT 不想翻就直接看结论吧 对于一个串的所有border,它们组成不超过logn个等差数列 也就是说,对于所有增加长度的方式(其实就是period),可以分成logn组,每组是一个等差数列 考虑怎…
已经快三周了啊--终于把挖的坑填了-- 首先显然是把除了自身的所有border拿出来,即做 \(\left\{ n - b_1, n - b_2, \dots, n - b_k, n \right\}\) 的完全背包.但是值域很大,所以考虑同余最短路. 首先,由 [国家集训队]墨墨的等式 的经验,显然可以 \(O(n^2)\),因为最长border可以很小,所以可以卡到满. 然后就要一个性质:一个串的border可以分成 \(O\left( \log n \right)\) 个等差数列.证明咕咕…
「WC2016」挑战NPC 解题思路 这个题建图非常厉害,带花树什么的只会口胡根本写不动,所以我写了机房某大佬教我的乱搞. 考虑把一个筐 \(x\) 拆成 \(x1,x2,x3\) 三个点,且这三个点相互连边,每对球和筐的连边都让球和筐拆出的三个点连边,这样如果筐内部的点存在一个匹配,那么这个筐就是半空的,所以我们需要先将球匹配完,然后不断尝试增广来自筐的点,每一次成功增广都使得答案 \(+1\) ,一般图最大匹配跑跑就好了. 下面的代码随时可能在 \(\text{uoj}\) 上变成 \(\t…
传送门 官方题解(证明都在这) 神仙题鸭qwq 转化模型,发现这题本质就是一个集合,每次可以加上集合里的数,问可以拼出多少不同的数 首先暴力需要膜意义下的最短路,例题戳这 然后这个暴力可以优化成N^2的.具体操作是枚举每个数,然后从某个点只用这个数往后跳,这样在膜m意义下可以形成\(gcd(a,m)\)个环.每个环找到dis最小的点,从这个点开始依次遍历整个环,更新后一个位置 有个结论是集合中的数可以分成\(logn\)个等差数列,所以可以每个等差数列贡献答案 然后对于每个等差数列,先把膜m意义…
传送门 豪华升级版同余类最短路-- 官方题解 主要写几个小trick: \(1.O(nm)\)实现同余类最短路: 设某一条边长度为\(x\),那么我们选择一个点,在同余类上不断跳\(x\),可以形成一个环. 显然只有在同一个环上的两点之间才可能通过\(x\)进行转移.我们选择环上答案最小的点,它一定不会在当次更新时被更新答案,所以直接从这个点开始依次遍历环上的所有点,每一个点尝试从前面的一个点更新答案. \(2.\)将\(\mod n\)的同余类最短路变为\(\mod d\)的同余类最短路: 令…
Problem BZOJ Solution 显然是一个同余系最短路问题,转移方案就是所有|S|-border的长度,有 \(O(n)\) 种,暴力跑dijkstra的复杂度为 \(O(n^2\log n)\) . 有一个结论,一个字符串的border的长度可以被分为 \(\log |S|\) 个等差数列. 那么我们不如来考虑一个等差数列所造成的影响,设等差数列共有 \(m\) 项,初值为 \(x\) ,那么它可以被表示为 \(\{ kd+x,k\in[0,m)\}\) \[f[i]=\min_{…
题目链接 题意简述 你有一个长度为 n 的字符串 , 将它复制任意次 , 复制出的串的前缀可以与之前的串的后缀重叠在一起 , 问最后总共可能的长度数目 , 长度不能超过 \(w\) 多组数据. \(n\leq 5*10^5 ,w\leq 10^{18}\) Sol 显然每次可以重叠的部分是原串的一个 boder 假设这个boder长度为 \(L\) , 那么长度可以只增加 \(n-L\) 那么就是一个存在性完全背包问题. 那么先求出所有boder , 之后显然可以用同余类最短路来求答案. 不过这…