摘要: 因为manacher算法把原来的字符串扩大了两倍,因此在应用时许多二级结论都非常不直观,现场推出来很麻烦,因此笔者在此做个简单整理,如果发现有错误或者有常用的我没有涉及到的,恳请在下方评论区指出,我会非常感谢。 1,rad数组虽然指的是回文半径,但是它的值减一和回文子串长度对应 因此,最长回文子串长 阅读全文
posted @ 2019-07-28 16:04 Isakovsky 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 题意: 找出这样的回文子串的个数:它本身是一个回文串,它的前一半也是一个回文串 输出格式要求输出l个数字,分别代表长度为1~l的这样的回文串的个数 题解: (回文自动机和回文树是一个东西) 首先用回文自动机求出所有本质不同的字符串,以及它们出现的次数,把前半部分的字符串和后半部分的字符串分别hash 阅读全文
posted @ 2019-07-28 15:04 Isakovsky 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 标准库中常用的需要定义比较函数的工具: sort 排序 priority_queue 优先队列(或称堆) lower_bound upper_bound 二分查找 nth_element 找数组第n大 set 集合 map 映射表 常用的定义比较函数的方法: 对于普通的数据类型,如int,doubl 阅读全文
posted @ 2019-07-28 12:19 Isakovsky 阅读(792) 评论(1) 推荐(1) 编辑
摘要: 这个回文自动机的板有问题,它虽然能过这道题,但是在计算size的时候会出锅! 题意: 求一个字符串中本质不同的连续子串有几个,但是某串和它反转后的字符串算一个。 题解: 要注意的是,一般字符串题中的“反转”,往往和回文串挂钩,反之亦然。 赛时最后半小时码的这道题,和队友很快发现了可以把字符串构造成s 阅读全文
posted @ 2019-07-28 00:01 Isakovsky 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 题意: 求最短路,但是你有k次机会可以把路径中某条边的长度变为0. 题解: 跑k+1次迪杰斯特拉,设想有k+1组dis数组和优先队列,第k组就意味着删去k条边的情况,每次松弛操作,松弛的两点i,j和距离l(i,j),不仅更新本组的dis数组令dis[j]=dis[i]+l[i,j],还更新下一组,令 阅读全文
posted @ 2019-07-27 23:52 Isakovsky 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 题意: 有一棵树,树上有许多人,他们要聚会,找一个点使得所有人到这个点的距离的最大值最小。 题解: 首先,以一个有人的点为根,求一个生成树,删掉所有没有人的子树,保证所有的悬挂点(只连接一条边的点)都是有人的节点,以保证后面求出的直径的两端是两个有人节点。为什么非得以有人的节点为根呢?因为如果找了一 阅读全文
posted @ 2019-07-27 23:44 Isakovsky 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 题意: 一个军队有n人,你可以给他们每个人安排战士或者法师的职业,有m对人有组合技,组合技的信息是a,b,c,代表如果这两个人是两个战士,则组合技威力为a,一个战士一个法师,威力为b,其中b=a/4+c/3,两个法师,威力为c,求最大的威力。 题解: 这道题给出了一个最小割的清奇思路。 首先不去想边 阅读全文
posted @ 2019-07-26 11:01 Isakovsky 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 题意: 给定一个数列,每次询问一个区间,问这个区间中的值可组成的周长最大的三角形的周长。 题解: 定理1:给定一些值,这些值中组成边长最大的三角形的三条边的大小排名一定是连续的。 证明:假如第k大,第k+1大,第k+2+b(b>0)大的三条边组成了一个边长最大的三角形,那么较小的两条边加起来长度大于 阅读全文
posted @ 2019-07-26 10:06 Isakovsky 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你一个数x,允许你多次询问yi,然后回答你x xor yi 是否等于yi,询问尽量少的次数以保证能求出xi是几,求出这样询问次数最少的询问方案数。 结果mod1e6+3 题解: 队友赛时很快想(cai)出最优方案是每次只让yi的一位是1,因此最优方案数是n! 然后很快wa/t到哭 粘了个几 阅读全文
posted @ 2019-07-26 08:31 Isakovsky 阅读(361) 评论(0) 推荐(0) 编辑
摘要: 题意: 给定一个N,随机从[1,N]里产生一个n,然后随机产生一个n个数的全排列,求出n的逆序数对的数量,加到cnt里,然后随机地取出这个全排列中的一个非连续子序列(注意这个子序列可以是原序列),再求出这个子序列的逆序数对,加到cnt里,重复这个过程,直到最后取出的为空。 题解: 先不考虑第一步随机 阅读全文
posted @ 2019-07-25 22:32 Isakovsky 阅读(847) 评论(1) 推荐(0) 编辑