P1852跳跳棋 题解
摘要:
好妙啊!这道题让我大开眼界! 写一篇题解加深一下印象。 思路 我重点对把原问题建模成一个树上问题的部分进行补充。 最开始读题的时候没有看到最多只跳过一个棋子,没想到这竟然是突破口。 我们假设一个状态 (x,y,z)(x,y,z),不妨设 x≤y≤zx≤y≤z。 考虑它能怎么变化?这里为了
[ABC338E] Chords 题解
摘要:
思路 思路还是很显然的,简单总结一下思路: 首先,将圆环从点 11 到 2N2N 切开,并将其拉直成一条直线。 在切开状态下,原来的弦变成了直线上的曲线。我们需要判断这些曲线之间是否存在交点。 在切开状态下,曲线之间的交点等价于满足 Ai<Aj<Bi<BjAi<Aj<Bi<Bj 的不
CF1898D Absolute Beauty 题解
摘要:
思路 容易发现,如果 ai>biai>bi 则将 aiai 和 bibi 交换。 在数轴上标出要交换的四个数的位置若线段 aibiaibi 和 线段 ajbjajbj 互不相交,此时交换比两条线段处于其他位置时更优。 具体证明这里就不再赘述,其他题解讲的已经很清楚了。 所以只需
[ABC347E] Set Add Query题解
摘要:
思路 通过读题发现,每个数变化当且仅当这个数在集合内。所以不妨设它被添加进来的时间点为 LiLi,它被删除的时间点为 RiRi,所以它被增加的数量就是这段时间内集合数量之和。所以用一个变量 cntcnt 模拟当前集合内有多少个数,前缀和维护即可。具体实现参见代码。 代码 #includ
CF825F String Compression题解
摘要:
思路 容易想到是个动态规划。首先设 fifi 表示字符串前 ii 个字符所组成的字符串的答案。状态定义好了,接下来就是考虑如何转移了。因为由 fifi 可以得到所有 fjfj,其中 i+j≤leni+j≤len,转移方程为 fi=fj+xfi=fj+x,其中 xx 为 字
P10378 [GESP202403 七级] 交流问题题解
摘要:
思路 我们把关系想成一张图,每次输入就给两个人连一条边。 因为一个人只有两种选择,所以我们在一个联通块内随便找一个点,跑一遍搜索,找出这个联通块内的答案。代码如下。 void dfs(int u,int color) { cnt2++;// cnt2是这个连通块内的总点数 cnt1+=color;/
[ABC352E]题解
摘要:
思路 这里提供一种暴力做法。方法就是当边数到达一个值过后就不加边了。我取的值是 500000500000,实际上可以开大一些,只要 xlogxxlogx 不超时就行了。 代码 赛时提交记录 #include <bits/stdc++.h> using namespace std; #define i
[ABC352D]题解
摘要:
题意 在长为 nn 的序列 aa 中 找出 kk 个数,设它们的下表为 p1\(,\)p2p1\(,\)p2 到 pkpk,满足这 kk 个数从小到大排列过后是一个公差为 11 的等差数列。求满足条件的 kk 个数的最大的 pp 减去 最小的 pp 最小
CF1859A题解
摘要:
CF1859A题解 思路 考虑一种极端情况,bb 数组内的数全部比 aa 大,这样也无法整除,所以这就是这道题的突破口。我们让 bb 数组内的数全部比 aa 里的大,最方便的实现方法就是把原数组内的最大的数放进 bb 数组,剩下的放进 aa 数组。注意特判无解情况
[ABC258Ex] Odd Steps 题解
摘要:
思路 拿到这道题,第一时间肯定想到是 dpdp 题目。 朴素 DP 用 dpidpi 表示序列和为 ii 的序列个数。因为原数组由奇数组成,所以 dpdp 只可能由 dpi−1dpi−1,dpi−3dpi−3 等等转移过来,若 i∈Ai∈A,dpi=0dpi=0。即