这段时间自己都不知道该干些什么,比赛时候什么都想不到,全靠队友A题维持生计这样...补题进度也是一拖再拖,明后天又是两场连打,感觉又要堆一堆题了...看着补算了。
以下题解包括:
\[1005【HDU-6595】 \\ 1009【HDU-6599】 \\ 1010【HDU-6600】 \\ 1011【HDU-6601】 \\ 1012【HDU-6602】\]
【1005】 数学 HDU-6595 Everything Is Generated In Equal Probability
与我无瓜,比赛时候队友A的。据说是找规律
http://acm.hdu.edu.cn/showproblem.php?pid=6595
#include
【1009】 回文自动机 HDU-6599 I Love Palindrome String
我不爱回文串,听他们说是回文自动机板子,然后我就去找板子了,然后一同乱改,然后A了。
http://acm.hdu.edu.cn/showproblem.php?pid=6599
回文自动机的大佬讲解和板子:https://blog.csdn.net/weixin_43093481/article/details/82889017
本题参考题解:https://www.cnblogs.com/xay5421/p/HDU6599.html
求有多少个 \([l,r]\) 满足 \(s[l,r]\) 和 \(s[l,(l+r)/2]\) 都是回文串。
考虑本质不同的回文串总共有 \(O(n)\) 种,然后统计每个满足条件的回文串出现次数和。
#include
【1010】 水题 HDU-6600 Just Skip The Problem
就是找规律,发现答案就是 n!,然后 %(1e6+3),意味着大于 (1e6+3) 的答案都是 0。
http://acm.hdu.edu.cn/showproblem.php?pid=6600
#include
【1011】 斐波那契+主席树 HDU-6601 Keen On Everything But Triangle
比赛的时候肝了4个小时...从WA到TLE到WA到MLE再到WA,莫队被我疯狂魔改,每次都能被找出反例,于是我心态炸了。
http://acm.hdu.edu.cn/showproblem.php?pid=6601
给定 n 个数和 m 次询问,每次给定区间 \([l, r]\),要找到给定区间内最大的三角形。
因为斐波那契数的存在,我们可以知道:如果区间内一直不能构成三角形,那么最多也只会出现40多次这样的情况,因为 \(fi_{40+}\) 就已经会超过上界 \(1e^9\),因此我们对于每一个区间,只需要用主席树每次去处理区间前3大,依次往后找就可以了,这样的时间总时间复杂度就是:\(o(m*log(n)*40)\)。
#include
【1012】 线段树+双端队列 HDU-6602 Longest Subarray
http://acm.hdu.edu.cn/showproblem.php?pid=6602
给你一个数组,数的范围是 \([1,C]\),给定 \(K\),让你找一个最长的区间使得区间内任意一个出现的数在该区间内的数量都大于 \(K\) 或者等于 0。
参考博客:https://blog.csdn.net/qq_40791842/article/details/97434430
整体思想就是枚举右端点,找最左的左端点。考虑建一颗线段树,每个叶子节点记录一改位置为左节点,当前枚举的节点为右节点的合法颜色种类数量,显然如果等于 C,那么以这个节点为左节点是合法的,由于线段树叶子节点最大权值为 C,所以可以通过维护一个最大值,和最大值对应的最左边的那个位置,查询这个位置就是最优左区间位置。
还需要用双端队列 \(deque\) 维护每个数的位置信息。
#include