你是不应为说 梦里炙热 梦外凉薄

这半个月的量好像偏少,大概是因为有些模拟赛太过不想写题解了就没写力!

SolutionSet for June Part Two

「20230616 模拟赛」 隔膜

复杂度很松,可以随便做。

「20230616 模拟赛」 皮配

这个显然有一个在中间放 \(\log V\) 个点,然后冲网络流的做法。

然后考虑 \(\log V\) 个点的匹配情况,发现总存在最优解可以使得从大到小每个位置匹配数尽可能多。

然后考虑霍尔定理去判定。整体来说大概是对两边都做一个高维前缀和。然后对于每个位置尽可能地去决策,肯定就是取到上界就好了。

「BZOJ4671」异或图

不会捏。


连通性计数,一般计算不连通的方案然后容斥出结果。因为不连通方案往往更好处理。

相当于是划分子集,不同子集的点之间是没有边的。

定义 \(f_m\) 表示至少有 \(m\) 个连通块的方案数,\(g_m\) 表示恰好有 \(m\) 个连通块的方案数,则显然有如下关系式:

\[f_m = \sum_{i=m}^n {i \brace m} g_i \]

由斯特林反演可得:

\[g_m = \sum_{i=m}^n (-1)^{i-m} {i \brack m} f_k \]

然后可以得到:

\[g_1 = \sum_{i=1}^n (-1)^{i-1} (i-1)! f_i \]

我们的任务变成了求解全部的 \(f_i\)

然后点数很少,我们去状压点的联通状态。

然后根据联通状态,只保留需要的边插一个线性基,就可以得到这些边都不选的方案数。

CF1158F Density of subarrays

考虑这个最大密度的 \(p\) 怎么求。显然就是在当前位置找到在此之后的 \([1,c]\) 中最晚出现的位置。


以下是读错题了,没看见是给定序列的子序列。

先算一些辅助量,定义 \(g_{i,j}\) 表示 \(i\) 个数,出现了 \(j\) 种数的方案数,从而求出 \(G_i = g_{i-1,c-1}\) 表示恰好 \(i\) 个数构成一个密度为 \(1\) 的方案数。

然后定义 \(f_{i,j}\) 表示前 \(j\) 个数,密度恰好为 \(i\)(即最晚出现位置恰好是第 \(j\) 个)的方案数。

我们就可以直接得到一个 \(O(n^3)\) 的做法。

我们考虑一层 \(f_i\) 一层 \(f_i\) 地计算。每一层大体都是一个卷积。我们得到了一个 \(O(n^2 \log n)\) 的做法。

以上是读错题了。


那么可以发现 \(p\) 最大不超过 \(\frac{n}{c}\)

其实我们也可以算出一个 \(g_{i,j}\) 表示 \((i,j]\) 这些位置在 \(j\) 组成一个 \(p = 1\) 的序列的方案数。

这个容易计算,于是大体有一个 \(O(n^2\frac{n}{c})\) 的做法。

那一个想法是对 \(c\) 阈值分治,我们已经得到了一个 \(c\) 较大的时候的做法。

考虑 \(c\) 较小的时候怎么做。类似清明,将 -1 的部分提取出来,也就是说冲一个辅助数组 \(h_{i,j}\) 表示转移点是第 \(i\) 种颜色,有 \(j\) 种颜色的权值为 -1 剩下的为正规值?不状压感觉巨难维护。

换个思路,我去一种权值一种权值地维护。整蚌埠住了,标算写的都是上面那一坨东西。

并且以 \(c = 10\) 为分界。给爷整蚌埠了,这也能跑,我对常数一无所知。就这点水平,就这点水平,就这点水平,就这点水平,就这点水平,就这点水平。不会开数据范围可以咬打火机。

ABC306 Ex - Balance Scale

实际上确定了这些数的大小关系,这些标记的顺序也就确定了。但是问题是一组大小顺序并不完全对应一组偏序关系。

然后我们就去枚举拓扑序,我只能想到 \(O(4^n)\) 的做法。呜呜呜。


实际上,基于 \(O(4^n)\) 的做法,我们可以得到一个基于容斥的 \(O(3^n)\) 的做法。

我们原做法中,为了避免算重,我们需要特别存储在上一轮被选中的部分。

现在,我们将这些一起选的拆开选,这势必会导致算重。但我们可以容斥,令容斥系数为 \((-1)^{c_s+1}\),其中 \(c_s\)\(s\) 的连通块个数。

这个容斥是什么意思呢?我们不妨来推导一下:

我们每一次转移的时候肯定希望我们转移的集合每次入度为 \(0\),并且是这个集合里全部的入度为 \(0\)

我们令 \(q_T\) 表示至少有 \(T\) 集合入度为 \(0\),令 \(p_T\) 为恰好有 \(T\) 集合入度为 \(0\)

那么显然有:

\[q_T = \sum_{T \subseteq S} p_S \]

由二项式反演集合形式可以得到:

\[p_S = \sum_{S \subseteq T} (-1)^{|S| - |T|} q_T \]

我们要计算的答案其实就是:

\[\sum_{T \subseteq S} p_T \\ = \sum_{T \subseteq S} \sum_{T \subseteq R} (-1)^{|T| - |R|} q_R\\ = \sum_{T \subseteq S} (-1)^{|T| - 1} q_T \]

因此容斥系数就被我们计算出来力!然后随便预处理计算一下就做完了。

CF1839E Decreasing Game

如果存在一个数,满足剩下的所有的数加起来都没有他大,则先手必胜。

如果只剩下两个数,相等则后手胜,否则先手必胜。

如果数值的总和是奇数,那么先手随便操作都必胜。

如果我能够将整个数划分成相等的两部分则后手必胜,算一遍是 \(O(n^2v)\) 的。

否则先手必胜,并且这种情况下先手可以随便选。因为假设先手选完之后出现了能划分成相等的两部分,则可以推出原来就可以分为相等的两部分。

ARC162C Mex Game on Tree

在这里锐评一下这场 ARC,这道题过的快就有时间爆杀 E 题,否则没有,呜呜呜。

这个对每个子树扫一遍,如果存在一个子树只有一个 -1 并且改完 mex 就为 kAlice 能赢,否则赢不了。

因为我们可以把情况划分成若干个互不包含的子树。

ARC162D Smallest Vertices

简单题,但感觉会比 E 难一点点。

考虑好树的总数,这个可以模仿 prufer 序列去思考,同样可以构造长度为 \(n - 1\) 的序列,容易发现他们是一一对应的。只用把最后一个元素限定为 \(1\) 就可以保证是根为 \(1\) 的。

现在对每一个节点计算答案。考虑枚举他的子树的点,这个实际上就是一个背包,就是总度数等于总点数减一,然后就有 \(O(n^4)\) 的做法。随便优化一下就是 \(O(n^3)\)

ARC162E Strange Constraints

锐评一下,这是个简单题,看来日本的小朋友计数能力不太强大。

从大到小考虑我们的数选择多少个,则能够放置的位置是单调的。我们记录一下当前还剩下多少个位置可以放置,还有多少种数可以放置,以及当前枚举到选择多少个数直接转移复杂度是带调和级数的,因此暴力转移复杂度就是正确的。

「20230619 模拟赛」 白块达人

首先每只手的位置的边界一定是一个白块。

因此定义 \(f_{x,i,j,k}\) 表示一只手的左/右端点在 \(x\) 上,另一只手的左/右端点在 \(i\) 上的答案。

考虑第一个不在上面两个区间的白块 \(y(y>x)\),分别转移到 \(f_{y,x}\)\(f_{y,i}\) 即可。

考虑将 \(i,k\) 两维拍到线段树上。

然后每次找到不被 \(x\) 的区间包含的最小的 \(y\),然后转移哪些不包含 \(y\) 的区间。

显然,包含 \(y\) 的区间只会有 \(L\) 个。

我日?直接暴力线段树合并复杂度就是对的?

哦,暴力转移的部分只会形成一个新的状态。给爷调破防了。

「20230619 模拟赛」 伊莉斯

首先那个矩阵只有四个角有用。这个很显然,调整法可以发现。

然后考虑如何快速判断一个状态是否有解。

苟命办法,显然就是优先先快速进入魔眼矩形内,然后走到右上角。

考虑怎么走到右上角。因为先上的话回对右下角不利,先右的话对左上角不利。

先上到矩阵边界显然对左上角最有利,容易发现左上角和右下角的魔眼他们的贡献在矩阵内是定值。

此外我们还发现每次可以将左上角的减去二,右下角的加上二,那么优先满足一边,然后检查能否都合法。

现在我们就走到右上角那一块儿了,发现此时随便怎么走都不影响答案了。

「20230619 模拟赛」 运输计划

直接 \(O(nm)\) 就可以冲过去。就是说枚举起点,然后扫一遍就好了。

正经做法大概就是做一个二维前缀和。

「20230619 模拟赛」 哈希计数

我是蛤G。就是说对边考虑贡献,然后每次合并两个子树,其中我们完全确定一条边的一个子树大小,直接就能计算这条边的贡献。用 bitset 维护就好了。

「20230619 模拟赛」 时代的眼泪

也不难。一眼根号分治。大部分容易处理。

小部分我开始走偏了,一直在想转化为 \(m=2\) 的情况然后想一个 \(\log n\) 的做法。但是实际上这个问题是区间逆序对,复杂度不会低于 \(O(\sqrt n)\)

所以其实把 \(m\) 个块放一起处理就好了。就是分块预处理一个块到一个前缀的小于对有多少个。

然后因为 \(m_i\) 个块不交,所以最多只有 \(\frac{n}{B}\) 个整块。然后还剩下散块,考虑左边整块对右边散块贡献可以快速算。

还有散块对散块的贡献。这个用树状数组维护。这个有一个卡常小技巧,就是把树状数组维护的维度换成区间序号,然后把散块询问拉下来做基排,这样我们的 \(\log\) 大小就除以了 \(2\)

CF1834F Typewriter

首先,答案有一个下界是 \(\sum [p_i < i]\),因为我们放置了它之后一定需要进行一次 restet

我们尝试去逼近这个界。这个过程跟我们还原置换环有极高的相似度。我们尝试用置换环去描述这个过程。

每一次沿着置换环的轨迹,我们换到不能换的时候,恰好捡起了 \(p_i < i\) 的一个位置的数,此时 reset,然后继续执行我们的置换环,容易发现答案就是这个下界。

那么我们现在就是需要维护 \(p_i < i\)

我好蠢啊,对于每个数的贡献区间是确定的,前缀和算一下就好了。

翻转的话再维护一下翻转值就好了。

「2020-2021 集训队作业」Storm

这个就是说,你会发现,这个问题感觉很费用流,但是仔细一看,就会觉得他其实很难用费用流去描述。

但是注意观察,我们最后选出来的边一定组成若干朵菊花,那么我们随机赋权,将这个图划分成二分图,然后费用流跑一下即可!

「SDOI2019」染色

呕吐吐。我写了接近 15k,恶心死我了。

首先,我们按照列考虑,相邻两列相对相等关系确定的情况(差不多 \(7\) 种)下,中间空白格子的填法容易 \(O(n)\) 预处理。

直接做直接就可以得到一个 \(O(nc)\) 的做法。然后考虑优化,发现每次我们对大量元素会进行相同的修改操作(可以规约成乘以常数和加上常数),少量元素单点修改。于是我们就可以通过打全局标记,维护全局和,以及特殊颜色维护单点值的方式维护整个 dp。如果遇到一列两个元素均确定,我们就会将所有元素置为普通颜色,其他情况每次增加的特殊颜色只会是 \(O(1)\) 个。

算上每次做单点修改时要求我们打的乘法标记的逆元,因此复杂度是 \(O(n \log n)\) 的。

但是发现我们的乘法标记每次乘上的东西的种类是较少的,由于都是相邻有值两列的差值的相关预处理值,因此我们只需要预处理 \(O(\sqrt n)\) 个逆元就可以做到 \(O(n)\) 的复杂度。

「湖北省队互测2014」一个人的数论

这题,好抽象。我们要计算的数的集合实际上就是那些不含给定质因子的小于 \(n\) 的数字。

你会发现,直接计算会出现大量庞大的质数贡献。显然不可取。

所以我们尝试容斥!前缀 \(d\) 次方和,拉插容易求解。

然后就是质因子容斥。我们至少有一个 \(2^w\) 的做法了。考场遇到这道题我也至少会 \(60pts\) 了。

哦,我可以拆开算贡献,就是说把那个拉插的多项式每一项分开算出来,这样就可以 dp 算了,然后把答案加起来。

人造情感

我是不是学线性规划学傻了捏?直接做有一个 dp,就是说定义 \(f_u\) 表示以 \(u\) 为根的子树内的路径最大权值和是多少。

可以枚举 LCA\(u\) 的路径,于是就可以树剖转移了。我们先就可以算出一个最大权出来。

算出最优解的具体解感觉对我们计算具体答案好像很难有什么帮助。

考虑继续 dp 分析,我们再定义 \(g_u\) 表示 \(u\) 子树外的路径的最大权是多少。这个感觉也可以算。

然后统计答案就在 LCA 处统计,做完了。复杂度 \(O(n \log^2 n)\)

「SHOI2004」最小生成树

一条非树边的权值必须大于与其形成圈的树边的权值,以此形成做限制形成对偶。

这实际上就是一个二分图最小顶标和问题,可以转化成二分图最大权匹配。

Orz the MST

这个与上道题很像,可以直接一样列出线性规划,然后就可以写出对偶式子,根据对偶式子可以直接建出最大费用可行流的模型了。

数据范围有点大,大概要使用势能dij。

「ZJOI2013」防守战线

容易发现,这个题目直接就是一个线性规划的形式,对偶完之后好看了一些,直接可以拆点费用流处理。

「BZOJ1283」序列

感觉会是一个典题。

先写出一个线性规划的形式,然后就可以直接扫一遍贪心力!

为什么不对捏。哦,原始线性规划少条件了。

对偶完其实就和志愿者招募是一样的,你说的对,但我网络流建图不太会了。

去复习了一轮!

「ZJOI2020」序列

条件是恰好变成 \(0\)

先直接构造线性规划。首先会有 \(O(n^2)\) 个变量。形成 \(O(n)\) 个等于的限制,最小化变量和。

线性规划感觉还是用笔做着舒服。

对偶完只剩下 \(n\) 个变量,但这些变量的取值很抽象。

也不是那么抽象,因为一些特殊区间的限制,每个位置的取值变成了 \(\{-1,0,1\}\),因为不能更大,更小也没有意义。

考虑 \(dp\)\(dp\),维护三个最大后缀和,显然取值范围是 \(\{0,1\}\)。于是就可以计算最大贡献。

线性规划是强大的。

「雅礼集训 2018 Day8」B

安装时间其实是这个有向无环图的一条最长路。这意味着所需时间其实很难描述。

这个最长路大概也可以用线性规划描述。就是按照边和每个软件包的结束时间描述,建立超源超汇即可表示答案。

于是我们就得到了一个有 \(2n\) 个变量的线性规划。不妨将其对偶一下。对偶完有 \(m + n + 1\) 个变量。

考虑二分那个单独存在的不等式的系数,那是不是可以构造费用流?

特别扭曲的形式。换个办法,我们二分最小的时间,计算最小的代价。

然后给线性规划对偶一下就可以容易地进行费用流的构建。

「UR #22」月球铁轨

这怎么在组模拟赛啊!!!

第一个转化是令 \(b_i\) 异或上 \(a_i\),然后先选上 \(a_i\),于是这个问题变成了一个类线性基的问题。

结合特殊性质随便发挥一下期望得到 \(55pts\)

第二个关键性质是,两个元素的异或值在线性基里的最大值,等于一个的最大值异或上另一个的最小值。

有了这个性质,我们考虑维护右端点的最大值,左端点的最小值,我们显然只用维护 \(m\) 个,这 \(m\) 个值都是在线性基大小发生变化时得到。那么我们按照线性基的大小记录这些值,并记录右端点对应的线性基大小为 \(x\) 的左端点区间,然后对左端点的每一种大小的值建立可持久化 trie 树(因为右端点一次是查询一个区间)。

复杂度偏高,实际上,我们可以在依次确定每一位的过程中一层一层建立这些 trie 树。

发现对于特定线性基大小的左端点区间,随着右端点的变大是单调的,因此我们甚至不用建可持久化 trie,可以直接双指针给 trie 的节点打上标记,而查询的时候直接查标记值就好了。

CF1835B Lottery

先将 \(n\) 个人的数值排个序,然后假设其为 \(p\)

我们设我们选的位置是 \(x\),它在 \(p_i\)\(p_{i+1}\) 之间。

显然下标大于 \(i\) 的部分在 \(x\) 左边不能与我竞争获胜名额。然后考虑 \([i-k,i]\) 的人,因为 target 不能再靠左了。

然后其实 \(x\) 只用战胜 \(p_{i-k}\) 即可!右边同理,\(x\) 只用战胜 \(p_{i+k}\) 就行。然后讨论一下就行?

全是 corner,乐死我了。

CF1835C Twin Clusters

感觉提示性好强好强,首先所有区间的异或值小于 \(4^k\),同时有大约 \(O(4^{k+1})\) 个区间,很难不让人产生联想。

如果两个的区间异或值相同,如果是相交或相离,则直接得到答案了。

如果是相含则讨论剩下部分的大小,如果大于 \(1\) 则得到答案,否则还要再找。

把问题化美观一些,如果存在两个元素相同,直接出答案了。

现在元素互不相同。

如果两个区间相同,则可以导出两个相交(或相邻)区间是相同的

如果是相邻,那就是有两个前缀相同。

否则就是一个大区间,与其中间包含的小区间相同。

日,分析那么多,就是一个生日悖论,只用选择 \(2^k\) 个区间左右就做完了。

CF1474F 1 2 3 4 ...

不是很有意思。

但这种题我总是调很久。

最长上升子序列显然就是最大子段和。我们枚举每种值域做 dp 算答案。

然后将值域划分成若干段,做一个 dp,表示当前值域最大值在某个上升/下降段取到的方案数,做完了。

「省选联考 2023」 人员调度

先写一发验一下思路再吹。

唔,好像要线段树分治,然后树剖线段树,最后是 \(n \log^3 n\) 的?

为什么我省选的时候不会做!为什么我省选的时候不会做!为什么我省选的时候不会做!为什么我省选的时候不会做!为什么我省选的时候不会做!为什么我省选的时候不会做!为什么我省选的时候不会做!为什么我省选的时候不会做!为什么我省选的时候不会做!为什么我省选的时候不会做!为什么我省选的时候不会做!为什么我省选的时候不会做!为什么我省选的时候不会做!

这题放到现在模拟赛不是被杀穿的签到题?

就是说,我们每个元素只考虑加入,然后考虑什么样的情况是合法的。就是说对于任何一个子树,他里面选的点的总数不超过其子树大小则一定都可以选。

那么选择一个点相当于将他到根的点的权值减去 1。然后线段树分治,边加删为只加和回退,那么我们每次加入的时候考察能否加入,不能加入就考虑反悔一步。做完了。

这个是 \(O(n \log^3 n)\),但是树剖,大家都懂。如果要优化到 \(O(n \log^2 n)\) 可以用 LCT 或者全局平衡二叉树替代树剖。

「省选联考 2023」 填数游戏

对做法有所耳闻。首先给 \(T\) 集合的两个数两两连边。然后显然会连出若干个基环树,因为如果边数超过点数则显然无解。

如果是树,则可以直接确定,如果是环,则只用决策环的答案。我想我考场上是想出了环的部分分的!

由于 Alice 没有选择元素不同的限制,因此他的选择是独立。把环的部分拉出来单独贪心,这个好做,我考场都会,就是找到对应 Alice 的位置,计算能冲两个的个数,仅能冲第一种环的元素的个数,仅能冲第二种环的元素的个数。接下来就是树的部分的贪心,这不是直接能选就选么?那不是做完了么?

不对,考虑少了,还有树的贪心部分。Bob 的工作相当于确定一个根,这个根是不选的。然后 Alice 就是让 Bob 的最优决策最大。依然可以将边分为只能对应一个的和两个的的情况。现在就是决策对应两个的情况。

真是讨论?先随便选一个根。考察换出别的根的答案。

我们有时可以将子树内的权加一,有时可以将子树外的权加一,有时可以将子树内或子树外的权加一。

称第三个是特殊边,然后是做讨论,如果两个特殊边子树不交,则他们不会都给子树内的权加一。

如果两个两个特殊边构成祖先关系,则子孙如果给子树内的权加一,祖先也会给子树内加一。

这样似乎就明朗起来了,这就相当于我们可以抽象出一个连通块,使得这个连通块内的特殊边都是给子树内加一,连通块下面都是给子树外加一。再由结论一又可以知道有且只有一条链上的特殊边是给子树内加一。

那么我们直接 dfs 扫一遍算出最大值即可。

「SDOI2019」连续子序列

结构好像 trie 树!唔,第 \(i\) 位的值仅与第 \(i\) 位的 popcount 的奇偶性有关系,为奇数则是 \(1\),否则为 \(0\)

所以不会有连续三个相同的数字。

我们根据给定的 \(s\),能否算出其进位情况呢?

哦,他这个 \(s\) 的长度很小,我们可以直接枚举低位的长相来算,和高位连续的 \(1\) 的奇偶性来算。

并且接下来要求 \(s\) 后的 \(k\) 位存在一位不同的个数。

不会做捏。

这么厉害的转化?这种构造方式相当于每次往 \(0\) 后增加一个 \(1\),往 \(1\) 后增加一个 \(0\)

这个相当于每次将第 \(i\) 位挪到 \(2i\) 位去,然后插入一下 \(2i + 1\) 位。哇!好巧妙!

那么我们就可以进行回溯力!然后就可以记 \(f(S,k)\) 表示当前串为 \(S\),往后加 \(k\) 位得到的不同连续子序列个数。

「CTS2019」重复

为什么,又是无限重复?

哦,但是长度与 \(n\) 相等,那重复不了几次。

先考虑 \(m = n\) 的情况,这个要特殊一点。

害,这么分析太痛苦了,换种分析方式。考虑计算周期恰好为 \(k\) 的合法串个数。

这个可以用至少为 \(k\) 容斥。考虑如何计算周期至少为 \(k\),而且外面还期望这个串他是一个最小表示法。

做你妈,怎么什么题都不会了/fad。


将限制转化为所有子串的字典序都 \(\geq S\)。当我们将 \(T^{\infty}\) 放到 \(S\) 自动机上匹配时,转移边必须大于路径上所有节点的后继转移边,这是限制。

考虑枚举 \(P(T^{\infty}) = u\),我们再接一个 \(T\),则一定会遍历出一个环回到 \(u\),因为 \(T^{\infty} + T = T^{\infty}\)

考虑 \(P(T^{\infty})\) 的意义,就是最长的是 \(T^{\infty}\) 后缀,又是 \(S\) 前缀的串!所有任意串 \(N\) 都有 \(P(N + T^{\infty}) = u\)

那么从节点 \(u\)\(m\) 条合法转移边回到 \(u\) 的方案一一对应,所以直接 dp 就有了 \(O(n^2m)\) 的做法。

考察这个自动机的性质,其不指向根的合法出边至多只有一条,否则较小的一条肯定不合法。

然后我们对于每个点就可以枚举走几步之后到达根,同时预处理 \(f_{i,j}\) 表示从根走 \(i\) 步到达 \(j\) 的方案数。

复杂度 \(O(nm)\)

「SDOI2018」物理实验

?这个不是直接把平板在导轨上做一个投影,离散化一下端点的值,然后记录每一段的斜率之和,然后扫一遍就做完了?

是我读错题了,还是说这道题的难点只有数学计算?

什么打火机题,不会出题可以咬打火机。

「省选联考 2023」 城市建造

考场上一直想边双,很困难。我一直不太会点双圆方树这些的,这道题吃了亏不冤,亏的是没有认真去做好做且可做的 T3 呢。

我果然还是不会呢。

好抽象啊,我刚刚发现我这道题读错题了,从考场上就是读错的状态。/lh。

其实还是不太会这个点双圆方树,这个点双圆方树的性质其实还是相当好的。

好抽象,晚一点再做吧。

「APIO2018」铁人两项

确定了 \(s\)\(f\) 之后,\(c\) 的取值范围就是他们的简单路径的并。

是否一定存在一条简单路径,使得我从同一个点双的点 \(u \rightarrow v\) 可以经过这个点双的另一个点 \(p\)

答案是一定存在,证明先咕着。然后就直接 dp 算就做完了。

CF1842F Tenzing and Tree

贡献显然会是 \(\sum |2sz_x - k|\),我们取黑色节点的虚树的重心作为根,则 \(k \geq 2sz_x\) 恒成立。

然后我们枚举这样一个根计算 \(\sum -2sz_x\) 的最大值。那么显然,将深度越深的点染黑是优秀的。

但是,我们要保证当前的点是重心,那么我们依次选,把他的贡献挂到后面去,然后反悔贪心即可。

CF1842H Tenzing and Random Real Numbers

唔!看上去是很复杂的题目。

感觉先要按照小于一半和大于一半分组,然后讨论额外中间限制成立的概率。

但我们能否讨论每组里的大小关系。对于小于一半的部分,我们每次把剩下的最小的一个拎出来,然后考虑需要新确定的对立集子里的数字大小,算一下概率即可?还是不对,对面的元素被限制的程度可能很高。

我们不妨再换个思路,我们每次取出离 \(0.5\) 最近的一个元素,然后讨论他丢在左边还是右边,

如果我们新选的元素与前面的元素有一个不超过 \(1\) 的要求,那么显然只能丢在左边。

如果我们新选的元素与前面的元素有一个不小于 \(1\) 的要求,那么显然只能丢在右边。

否则丢在哪儿都可以,做完了。我怎么这么蠢啊。

CF1842G Tenzing and Random Operations

每次随机选取一个后缀加上一个 \(v\),求经过 \(m\) 次操作后的期望权值积。

现在看见乘积题就想到了雷宝的题。期望权值太抽象了,还是考虑方案数。

妈呀,\(m\) 怎么这么大。

也是,不大也不用我做了。首先有暴力 dp,定义 \(f_{i,j}\) 表示从前往后确定到了第 \(i\) 个元素时使用了 \(j\) 个操作的答案。

从后往前似乎也有着良好的可计算性,就是说我只需要记录 \(k\) 项的乘积和就可以完成递推。

会不会是拉插什么的?好像不太像。糟糕,不会又要不会做了吧?

这个 \(m\) 大飞了,感觉干什么都不行。不会真的要从概率入手吧?考察乘积的组合意义?每次给一个后缀的盒子添加 \(v\) 个球,每个盒子选一个球,求选球方案数?不对,害。

今天得解决这道题,还是看题解吧。

我去,这个好厉害。乘法分配律将贡献拆开,相当于选择一个贡献,这里有一个“系数用到了再算,没有用到的东西不区分的思想”!好厉害。

就是说,我从左到右考虑,尝试确定我们选择哪一个 \(v\) 作为这一位的贡献,可能选择前面的前缀选择过的操作带来的 \(v\),或者选择前面没有选择过的,如果是前面没有选择过的我们还要确定一下它的位置和他是第几个操作。我去,好厉害,最后再计算剩下的操作的贡献!

这个没有用到的不区分思想太厉害了,嗯,还有就是将这些操作区分为用过和没用过也很厉害。

「20230630 模拟赛」 切割大师

猜想可以分成质量和体积都相等的两组。

考虑构造,以体积为底边长,密度为高,那么质量被抽象为矩形面积和。

我们按照高度从小到大排序,将这些矩形排成一排,考虑一个起点,选中其右边 \(\frac{V}{2}\) 的长度的部分,显然对于起点单调递增,这个面积也单调递增。这个函数显然是一个连续函数,所以我们一定能够找到面积等于 \(\frac{M}{2}\) 的位置。这是一个单调函数,二分一下就好了。

「20230630 模拟赛」 静态顶树

难点在想到一个可优化的暴力。

定义 \(f_{i,j}\) 表示以 \(i\) 为根的子树中,\(i\) 所在连通块的最小值为 \(j\) 的方案数。

一旦有一条边是不选的,我们迅速将这部分连通块的答案加入总的答案中。

\(dp\) 数组的维护,单点对整体只有区间乘和单点修改的操作,因此线段树合并易于维护。

做完了。

posted @ 2023-07-02 19:41  Reanap  阅读(84)  评论(0编辑  收藏  举报