摘要:
题意:初始时给出一个图,每个点有一个权值,三种操作:(1)删除某个边;(2)修改每个点的权值;(3)询问与节点x在一个连通分量中所有点的第K大的权值。 析:首先是要先离线,然后再倒着做,第一个操作就成了加边操作,很容易实现,第二操作,就是分成两个操作,先把x结点删掉,然后再插入一个新结点, 最后一个 阅读全文
摘要:
题意:给出一个字母表以及每个字母出现的概率。再给出一些模板串S。从字母表中每次随机拿出一个字母,一共拿L次组成一个产度为L的串, 问这个串不包含S中任何一个串的概率为多少? 析:先构造一个AC自动机,然后随机生成L个字母,就是在AC自动机的某个结点走多少步,dp[i][j] 表示在 i 结点,并且剩 阅读全文
摘要:
题意:给定一个幸运日,求第 k 个幸运日是多少。 析:由于闰年,每400肯定会循环一次,所以我们就可以先找出每400年会有多少幸运日,是2058个,然后再暴力。 代码如下: 阅读全文
摘要:
题意:给按顺序给定 n 个人群,用x和y来描述,如果有没有任何一个x' < x y' <= y 或 x '<= x y' <= y,那么这个群体就是优势群体, 让你求出每放入一个人群,已经知道的群体有几个优势群体。 析:首先我们知道的是,如果某个群体失去了优势,那么该群体就不可能再获得优势,然后我们 阅读全文
摘要:
题意:给定一个字符串,求其中一个由循环子串构成且循环次数最多的一个子串,有多个就输出最小字典序的。 析:枚举循环串的长度ll,然后如果它出现了两次,那么它一定会覆盖s[0],s[ll],s[ll*2].....这些点中相邻的两个,然后向前和向后匹配, 看看最大的匹配多大,然后把所有的答案记录下来,最 阅读全文
摘要:
题意:求一个串中出现重复子串次数最多的数目。 析:枚举每个长度的子串,至少要重复两次,必然会经过s[l*i]中相邻的两个,然后再分别向前和向后匹配即可。 代码如下: 阅读全文
摘要:
题意:单源最短路,给你一些路,给你这些路的长度,给你修这些路的话费,求最短路和最小花费。 析:本质就是一个最短路,不过要维护两个值罢了,在维护花费时要维护的是该路要花多少,而不是总的路线花费。 代码如下: 阅读全文
摘要:
题意:n个人排成一行,从第一个人开始,每个k个人报数,报到数的人被杀死,剩下的人重新排成一行再报数。一共q个询问,每次询问第qi个死的人是谁。 析:是一个约瑟夫的变形,我们要考虑子问题的问题同样编号是0-n-1,如果在某一轮,第 i 个人如果能取模 k 为0,那么这一轮他就会被干掉,如果不是 那么下 阅读全文
摘要:
题意:给你若干个平行于坐标轴的,长度大于0的线段,且任意两个线段没有公共点,不会重合覆盖。问有多少个交点。 析:题意很明确,可是并不好做,可以先把平行与x轴和y轴的分开,然后把平行y轴的按y坐标从小到大进行排序,然后我们可以枚举每一个平行x轴的线段, 我们可以把平行于x轴的线段当做扫描线,只不过有了 阅读全文
摘要:
题意:奶牛Bessie在0~N时间段产奶。农夫约翰有M个时间段可以挤奶,时间段f,t内Bessie能挤到的牛奶量e。奶牛产奶后需要休息R小时才能继续下一次产奶, 求Bessie最大的挤奶量。 析:一个很水的DP,就是不能再表示时刻了,而是区间,dp[i] 第 i 个区间 最大是多少。 代码如下: 阅读全文
摘要:
题意:给定一个字符串,求一个最长的回回文子串,多解输出第一个。 析:把字符串翻转然后放到后面去,中间用另一个字符隔开,然后枚举每一个回文串的的位置,对第 i 个位置,那么对应着第二个串的最长公共前缀, 求最长公共子串,可以用RMQ解决。 代码如下: 阅读全文
摘要:
题意:给定一个n*n的矩阵,问从(0,0)开始走,每次最多水平或者垂直走k个格子,且要保证每次到达的格子要大于前一个,问最大和是多少。 析:一个很简单的记忆搜索,dp[i][j],表示到达(i,j)的最大和是多少,我们可以反着推出答案。 代码如下: 阅读全文
摘要:
题意:有n堆石子,每个人只能从某一堆至少拿走一个,不能拿者败。问事先拿走某些堆的石子,使得先手必败。 析:将石子拆成二进制,未知数为1表示保留该堆石子,为0表示事先拿走该堆石子。最后求自由变元的数目,就是2的幂。 代码如下: 阅读全文
摘要:
题意:给出一颗n个节点的边权树,求一条路径(u,v),使得路径上的边的权值异或值最大。 析:先从0开始遍历树,记录所有的点到0的路径的边权异或值,然后任意两点的路径的异或值就是dp[u]^dp[v], 然后再构造一棵二进制树,每次查询,注意长度要相同,最后求最大值即可。 代码如下: 阅读全文
摘要:
题意:求 n 个哈希值相同的串。 析:直接构造,通过取模来查找相同的串。 代码如下: 阅读全文
摘要:
题意: Alice和Bob正在下古代围棋,规则如下: 棋盘有8×8个格子,棋子下在棋盘的交叉点上,故可以有9×9个落子的位置 Alice执黑棋Bob执白棋轮流落子 与棋子直线相连的空白交叉点叫做气。当这些气都被对方棋子占据后,该棋子就没有了“气”,要被从棋盘上提掉。如果棋子的相邻(仅上下左右)直线交 阅读全文
摘要:
题意:数独。 析:由于只是4*4,完全可以暴力,要注意一下一些条件,比如2*2的小方格也得是1234 代码如下: 阅读全文
摘要:
题意:求n个数中长度为m的上升子序列的个数。 析:很容易想到一个n的三次方的DP,dp[i][j]表示第 i 个数长度为 j 的LIS 有多少个,但是会TLE,因此必须优化,dp[i][j] = sum{dp[k][j-1] | a[i] > a[k]} 我们可以用树状数组优化,当然用线段树也OK, 阅读全文
摘要:
题意:给定一个括号的序列,原先的序列是碰到左括号加1,碰到右括号减1,然后把序列打乱,让你找出字典序最小的一个答案。 析:直接从第一个括号判断就好了,优先判断左括号,如果不行就加右括号。 代码如下: 阅读全文
摘要:
题意:给定一个序列,求另一个不递减序列,使得Abs(bi - ai) 和最小。 析:首先是在每个相同的区间中,中位数是最优的,然后由于要合并,和维护中位数,所以我们选用左偏树来维护,当然也可以用划分树来做。 代码如下: 阅读全文