2023.2 杂题

2.?#

CF1198C#

先贪心的求出一组匹配,然后不在匹配里的点就可以作为点独立集,因为不可能有两个相邻的点同时不在贪心求出的匹配里。显然匹配边相当于两个点,那剩下一个点,加起来共 3n 个点,显然有一个存在超过 n 次。

record

CF1534D#

先随便选一个点当根问,然后就知道剩下的点深度的奇偶性。显然所有与某个点距离为 1 的点都和他有边。那么考虑将点分为奇数层和偶数层,然后找少的那一种问。

record

CF1365G#

CF1391E#

先找出一个dfs树,如果深度大于等于 n2 直接选一条到叶子的链,否则把同一层的点匹配,这样显然不会有超过两条,且每一层最多剩下一个点,最多少 k21 个点,符合条件。

record

2.14#

LG4555 最长双回文串#

找分界点,然后用manacher或者pam求出每个位置的最长回文后缀或者前缀。如果你用manacher,在扩展的时候处理即可。

POI2012 PRE-Prefixuffix#

一样的做法,找关键点。然后我们想要求出 ti 代表 s[i,ni+1] 这一段的 border,然后枚举所有border即可。那么由于 ti 是由 ti+1 掐头去尾得到的,所以 titi+1+2,于是是能分析直接从大到小暴力即可。

CF1654F Xor Minimal String Xoration#

类似后缀排序,处理 f(i,j)=sisi1si2j1,显然 f(i,j)=f(i,j1)+f(i2j1,j1)。于是把这个看做二元组,然后后缀排序即可。

C1400F x-prime Substrings#

观察到 x 很小,我们跑一遍暴力发现所有 x-prime 数的长度的和最大也不超过 5000(实测应该是 x=19 时最大)。那问题就变成了总长度不超过 5000 的模式串和一个文本串问最少从文本串中删去几个字符可以使得文本串不包含任意一个模式串。

多串匹配问题想到AC自动机。这种问题又可以想到动态规划。设 dpi,j 代表匹配到文本串第 i 位且当前在AC自动机上的状态 j。首先下个位置肯定可以删掉,所以 dpi+1,j 可以为 dpi,j+1。然后考虑不删下一个字符,则加上下一个字符后一定不能是某个模式串结尾,这可以在 fail 树上 dp 求得某个状态是不是某个模式串的结尾。如果不是,则其可以为 dpi,j。最后的答案就是 min(dpn,)

LG7361 拜神#

BOI2004 REPEATS#

借鉴优秀的拆分一题的思路,枚举重复的长度 ll 个设置一个关键点,然后二分答案转判定问题。查询连续 k 个点的lcp和lcs,要求 lcp+lcs1l,说明存在 (k,l) 循环,滑动窗口维护复杂度 O(nlog2n)。显然若关键点区间 [l,r] 是合法的,那么 [l,r] 的子区间也是合法的。于是直接双指针即可。复杂度 O(nlogn)

LG5115 Check,Check,Check one two!*#

对于一个子串 T,它在原串上出现的两个位置。

LG8147 Salieri#

CF1043G Speckled Band#

显然如果存在两个相同的数那么一定最多 4 个,于是依次判断 1,2,3 是否可行即可。对于 1 很容易判断,直接枚举循环节长度即可。对于 2 有三种情况 AAB、ABB、ABA。对于前两种情况直接对每个位置处理最短的A和B即可。这个可以用优秀的拆分的做法,然后对于合法的部分并查集合并,每次暴力遍历即可。对于后一个部分即找区间border,对于可行性的判断,根号分治。如果 border 长度小于 n,则暴力做,否则他出现的次数不超过 n,在后缀数组中 l 的排名的 n 邻域枚举即可。对于 3 的情况,如果 sl,srsl,r 中出现那么直接构造 ABAC 或 BABC。否则就是 BAAC,这用刚刚 2 中处理好的部分求最小值即可。

posted @   Semsue  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
Title
点击右上角即可分享
微信分享提示
主题色彩