2025.3 做题记录

CF333E Summer Earnings *2500

注意到你的题意就是选 \(3\) 个点,构成一个三角形,然后最短边的一半就是答案。所以我们的目的是让最短边最长。到这里我们可能会想到二分,但在这题中,这是不可行的,因为你发现二分后你并不会很好的处理。

那我们考虑另一种思路,你考虑类似最小生成树的思路,把每两个点之间的距离加进去,边权从大到小排序,然后从大到小枚举边权(当然我们也知道边对应的两个点)。枚举到一条边 \((u, v)\) 时,如果在之前他们都连向了同一个点 \(k\),那么答案就是 \(\frac{dist(u,v)}{2}\) 因为你之前就有这两条边所以这两条边的边权一定比 \(dist(u,v)\) 大。

然后你的问题就在于快速判定 \(u\)\(v\) 在以前有没有同时连向同一个点。这个朴素判是 \(O(n)\) 的。但是我们注意到你只有连和不连两种。那么你可以使用 bitset 优化这个过程,于是你就是判 \(u\)\(v\) 的 bitset 的交内的 popcount 是否大于等于 \(1\) 即可。

时间复杂度 \(O(\frac{n^3}{w})\)。做完了。

CF348D Turtles *2500

我不会 LGV 引理,但是这个思想确实可以借鉴。

考虑转化问题,我们可以转化为有两只小乌龟,一只从 \((1,2)\) 走到 \((n-1,m)\),一只从 \((2,1)\) 走到 \((n,m-1)\)。因为你考虑到两只乌龟只能这么走,其他的起点和终点都必定会有交点。

那么我们这两种方案数先乘起来,但你发现很显然还是可能会有交点。然后你注意到,如果两只乌龟第一次交到了 \((i,j)\),那么让他们从 \((i,j)\)\((n,m)\) 的路径交换(一定可以交换,因为他们相遇了)。这样第一只乌龟就走到了 \((n,m-1)\),第二只乌龟就走到了 \((n-1,m)\)

然后的方案数就是前一种两个的乘积减去后一种两个的乘积。

或者说你还有另一种理解就是你的假掉的方案数本质都等价于第二种的乘积。然后你就做完了。

CF852A Digits *2500

唐诗随机化,没写。感觉质量很没素质(雾)。

你考虑到你全加起来一位数肯定是不对的。那么你需要插一些两位数,或者没准儿三位数。但是你肯定不能插太多对吧。

那么你考虑枚举先来一个一位数,然后你随机设一个概率 \(p\),表明你要拼下一位的概率。比如设 \(p = \frac{1}{20}\)。然后你每次算一下加法表达式的答案。

然后如果是一位数那就直接输出。否则就无非是你再随一遍罢了。

CF1444C Team-Building *2500

没写,但是感觉其实不是很难写。我基本全想出来了。没想出来的有两个,一个是建辅助点,一个是没想到无效点对只有 \(O(m)\) 对。

首先你如果单颜色连通块有奇环,直接把这个连通块封了,就是你把边都断了吧。考虑计算总个数,设你的无效颜色数为 \(t\),你的答案是 \(\binom{k-t}{2}\)。然后你考虑计算不合法点对。

你要发现如果两个颜色对 \(p,q\),其没有原图上的直接边相连,那么你这个颜色对一定不可能不合法。然后你注意到一个事儿,就是一个同颜色连通块内的点是没有意义的,你只用管“外点”(连向其他颜色的点)。那么你考虑到你为什么不能很好的把连通块全缩成一个点,主要是你点的颜色有可能不同。那么你考虑怎样能缩成一个点。

一个小 Trick,在二分图染色后,如果两个点异色,那么新图上可以直接连边,如果同色,那么建一个虚点,两个点都连向虚点,这样我们就建好了新图。

然后你考虑到你每次跑两个可能矛盾的点你只需要连两边都为这两个矛盾点的边,然后你暴力跑二分图。这么复杂度是对的,因为他均摊了。嗯然后如果他矛盾了,答案减一即可。然后我们就做完了。

CF946G Almost Increasing Array *2500

怎么又又又差一点想到正解。没想到的在于拼接的思路。

难点在于读题(雾)。首先考虑弱化问题,我们把特殊值直接扔了,那么就是经典 *2100 题目,因为考虑到中间要插整数,所以你要保证 \(a_i-a_j\geq i-j\),转变一下变为 \(a_i-i\geq a_j-j\)。那么直接对新序列求最长不下降子序列即可。

考虑你删掉一个有什么作用,就是你要理解答案为什么不是 \(n-\) LIS \(-1\)。这很重要。因为你注意到删一个数其实可以删掉一个空,也就是我们可以把后面全部向前平移。比如原先的 \(5 \space 6 \space 6\) 我要改成 \(5 \space 6 \space 7\),但是我们去掉之后不用预留两个空也就是 \(5 \space 7\),而是可以变为 \(5 \space 6\),就是把 \(6\) 这个空抹了。可能例子不太好,自己理解啥意思就行了。

也就是说,我们钦定特殊点为 \(i\),那么 \(i\) 不选,\(1\)\(i-1\)\(a_i-i\)\(i+1\)\(n\)\(a_i-i+1\)。这个是可以想到的。

然后你注意到如果你倒着做,这是单点加,全局最长上升子序列。但是很不幸线段树只能维护区间最大子段和而不能维护 LIS。我们考虑枚举断点,这是很容易想到的。

然后你的目的就是拼接 LIS,这其实很简单,但我没想出来,很值得借鉴这个方法。就是预处理 \(suf_i\) 表示 \(i\)\(n\) 的最长上升子序列,但是你要 \(\geq a_{i-2}\),因为我们后面增量维护 LIS 的时候要强制选 \(i\) 点作为 LIS 的最后一块。树状数组维护 dp 值即可。

然后你拼的时候就是前缀求一遍,强制选 \(i\),然后拼上 \(suf_{i+2}\) 即可。然后取个 \(\max\) 你就做完了,感觉思路还是挺自然的。

CF1305F Kuroni and the Punishment *2500

还是挺困难的。我想到了三个比较显然的结论。

  1. 答案上界是 \(n\),即都改成 \(\gcd\)\(2\) 的。
  2. 如果我们称改动幅度大于等于 \(2\) 的为改动幅度较大,那么改动幅度较大的数应该小于 \(\frac{n}{2}\)
  3. 你的 \(\gcd\) 一定是一个小幅度改动数改动后的质因数。

然后你的做法就是额,你考虑到一个数,在最优状态下有两种状态,一个是改动幅度较大,一个是较小,且两者都有二分之一的概率。那么如果你选取了一个数,分解其 \(a_i\)\(a_i-1\)\(a_i+1\),那么这个数正确的概率就是一半,那么你整体是根据这个数的状态正确性而改变的,所以你整体正确率是二分之一。如果你随机 \(k\) 个数,那么你这 \(k\) 个数很容易就有一个选对了,那么你这个数状态选对了,那么你整体就对了,这里的状态选对是指最优状态下,你这个数的状态。那么你错误的概率很容易知道是 \(\frac{1}{2^k}\),你把 \(k\)\(50\) 即可。

然后你发现你做完了,这题还是很牛的。

CF993D Compute Power *2500

花费 2h 想出来的,死于不会判断相等的情况。启发性还是有的。

首先虽然我没注意到,但是你列出那个式子可以引出第一个做法,就是 \(\frac{\sum a_i}{\sum b_i}\),可以引出 01 分数规划。但是我用了另一种做法。

你注意到比值不好控制,但是如果我固定了分母或者分子的和,再求另一边的极值是较为容易的。那么由于 \(b_i\) 较小,所以我们控制 \(b\) 的和,你又注意到 \(n\) 非常小,你完全可以把 \(b\) 开成背包维。

然后你显然是按照 \(a\) 排序,后面的可以覆盖掉前面的,你看一下你哪些选那些不选,暴力往前转移。然后相同的,你肯定先选处理器个数大的。

注意相等的情况下后面选了不能覆盖前面的,你需要进行一波操作,但是这波操作是什么并不重要,其实就是对于每个相同的颜色在颜色内部转移,记 \(f_{i,j,k}\) 为 表示当前处理到第 \(i\) 大的功率,有 \(j\) 个计算机可以放第二个任务,此时的处理器个数为 \(k\) 时最小的功率和。然后转移就做完了。

所以这题给我们最大的启示其实是提醒我们还可以控制一维解决另一维,以及不要忘了和式分数比可以 01 分数规划。

P6075 [JSOI2015] 子集选取

选自:简单计数题

其实也不简单,感觉应该评绿。我们不考虑找规律的做法,因为这样很没有素质,我们考虑组合意义。

首先是较为有启发性,但是我见过的套路,就是其实 \(n\) 个是独立的,我们每次只需要考虑一个数就可以了,最后根据乘法原理,设一个数的答案为 \(t\),真正的答案就是 \(t^n\)

考虑题目中给出的三角形,如果我选了一个点,那么其左方,上方和左上方的整个梯形(或三角形)都必须有这个数,而且你还可以再不同的位置选,都是同理的,那么你观察到,其实就是从 \((0,0)\) 开始走,走到一个斜率为 \(-1\),截距为 \(k\) 的一次函数,由于 \((0,0)\) 距离这条直线上在第一象限内的每个整点的曼哈顿距离都是 \(k\),于是你就转化为了路径计数问题。

考虑一个我忘了我在哪里见过的经典套路,那题好像是用 dp 维护轮廓线,转移是转向/不转向。这个一样,考虑你走 \(k\) 步,每步可以转向/不转向,问有多少种方案数,那显然每步你都有两种选择,就是 \(2^k\),于是你的答案就是 \(2^{nk}\)

posted @ 2025-03-02 16:57  DataEraserQ  阅读(14)  评论(0)    收藏  举报