唐龙题不知道为什么有 2600。此处应有[对称唐龙.gif]。
首先,把 的序列 变成给定序列显然是难做的,考虑将目标序列进行某种映射,转化成将 变成 。
然后发现,对于每个数字,只有对其的最后一次操作是有用的,并且进行放到开头的操作的数字一定是某个 内的所有数,并且依次进行 的操作。放到末尾的同理。
梦境原来就是回忆的足迹
唐龙题不知道为什么有 2600。此处应有[对称唐龙.gif]。
首先,把 ai=i 的序列 a 变成给定序列显然是难做的,考虑将目标序列进行某种映射,转化成将 a 变成 ai=i。
然后发现,对于每个数字,只有对其的最后一次操作是有用的,并且进行放到开头的操作的数字一定是某个 [1,i] 内的所有数,并且依次进行 i,i−1,i−2,⋯,1 的操作。放到末尾的同理。
提供一个更臭一点的 O(n) 做法。
首先分析,如果现在已知 A,怎么求 f(A)。首先贪心地想,设依次操作 vi,若 vi+1<vi,那么换成先操作 vi 再 vi+1 一定不劣,因为可能的结果后者包含前者。于是一定是按 v 从小到大操作。
然后发现,对于一个 ai=aj=x,若 ∃k∈(i,j),ak<x,则无法用一次操作同时使 ai,aj 满足要求,否则会影响中间已经确定的数。同时,若 ai 这个数是第一次出现,显然也要一次操作。
看到这题不知道为什么第一反应是 flow。
先把每个数质因数分解,然后问题就变成了让选出的集合无交。
如果此时像我一样,发现是分成两个集合,就往最小割的方向想,就到死路了。主要是最小割就要求每两个不互质的数间都要加一个限制,无法优化。
如果你做过 CF79D 你就会把这题秒了。
记 A+B+C+D+E=m。
首先区间反转差分一下变成两个点同时反转,然后发现原序列差分序列上只有 4 个 1,于是把反转转化成差分数组上 1 的移动。
好题,随机讲讲。
首先期望转 LIS 长度和除以方案数。LIS 这个东西不好刻画,但是发现 n=6 ,所以考虑直接枚举每个数排名,也就是枚举 Xi 离散化后的序列。
然后考虑知道这个序列之后怎么求方案数。先想一个弱化版的问题:有 m 个数,已知他们的排名,每个数的取值范围为 [1,k],k 为定值。求方案数。答案显然是 (mk)。
讲的题,但是没听而且感觉挺有意思而且见过类似的,于是自己做出来了。
首先有关键性质:若最大距离的同色点对为 u,v,树上的任意一条直径 (s,t) 满足 s=u,s=v,t=u,t=v 其中至少一个成立。
证明:反证。若有一条直径两端点为 s,t 且 u,v 不是任何的一个 s 或 t,s,t,u,v 互不相同,钦定 dis(s,u)<dis(t,u),则 colu=colt。同时,因为 (s,t) 为直径,dis(u,t)<dis(s,t),dis(u,v)<dis(s,v),于是 cols=colv,又 colu=colv,则 cols=colt,此时显然 s,t 同色且距离更远,不成立。
好久没写过 AC-Automaton 了。来一发。
有个显然的 dp 为 dpi=max(dpj+w[j+1,i]),其中 w[l,r] 表示字串 [l,r] 对应的模式串的价值。时间复杂度大概是 O(∣S∣∑∣Pi∣) 的。显然不能过。
考虑这种有一个文本串,很多模式串匹配的题一般怎么做,容易发现可以用 AC-Automaton 维护。
偶然找到的线性基好题。
考虑 s=⨁xi,则此时 b=s⊕a,问题变为 max(a+(s⊕a))。
然后观察 s,有一个很典的想法是,s 为 0 的位上,a 如果是 0 则会产生 0 的贡献,否则产生 2,s 为 1 的位则稳定产生 1 的贡献,结合异或本质理解。
首杀问号题,虽然没有问号题的难度,但是至少是自己想出来的。
对于操作一和二,我们直接用分一个数组记录下来,O(nq)。
对于操作三,我们思考怎么样通过上面记录的信息处理答案。发现对于一个矩形,只要确定了 x+y 的值,x−y 的值就是一个区间,因为矩形的约束可以变成 2×A≤(x+y)+(x−y)≤2×B,2×C≤(x+y)−(x−y)≤2×D。这启示我们可以类似莫队,维护两个指针。
首先看到题目,容易想到一个简单很多的情况:在一条链上,且终点确定。此时就可以把终点两边的点分开,分别计算到终点的距离之和,看是否相等即可。
没有确定终点时,枚举一个终点即可。
考虑将这种做法带入本题。先 O(n) 枚举终点,然后会发现,这其实是一个判定问题:如果可以全部到终点,那么答案就是 2∑ci=1depi。这一点下面会证明。ci 表示点 i 上是否有棋子。