CF 1800
文章平均质量分 89
CF 1800的题目
秦三码
石油大学
展开
-
E2. Three Blocks Palindrome (hard version) -二分查找 暴力
200以内是有其道理的,可以做一个1--200的前缀和,另外贪心的想,我们从头选取的时候,一定是选取当前位置作为 前后段的数字的,当前位置选取之前另一些数字都不是最优的,所以遍历到一个位置就必须把这个位置的数字当成前后段数字,那么前缀和求出来前段数字个数,二分查找后段这个对应数字个数的最右侧,最右侧一定是最优的,然后暴力枚举在此之间1-200的任意一个数字作为b,取最大值即可。原创 2023-01-21 13:21:37 · 102 阅读 · 0 评论 -
B. Edge Weight Assignment -结论 树
证明如下,另一个叶子结点为偶数,在满足其余全部叶子结点距离都是偶数的时候,这些叶子结点之间 势必要么是子树关系,要么是并列关系,子树关系很显然,偶数减偶数一定是偶数,并列关系必定有LCA,那么必定会有重合地方,也就是 x+y=偶数=x+z ,可以证明 x为偶数时,y,z为偶数,x为奇数时,y,z为奇数,奇偶性相同,其和必为偶数。是个结论题,首先看最小值,显然是1,满足条件无非是每个叶子节点之间的距离都是偶数,比如样例1,3。这一验证如何快速进行呢?原创 2023-01-21 12:30:37 · 102 阅读 · 0 评论 -
C. Count Triangles -差分 -枚举
考虑最为暴力的方法,也就是统计x+y>z的数量, 枚举z,对于每一个z,暴力枚举大于z的x+y,显然会超时。值得注意的是z1原创 2023-01-21 11:34:13 · 122 阅读 · 0 评论 -
D. Numbers on Tree -优先队列 -构造
证明 若两个点数值相同 ,位置在不同子树中,对其中一个子树进行操作,对于其管辖的子树,可以整体移动,这样子树内部不会影响, 对于比它大的父亲节点,也可以直接平移一些,这样不会影响。那么根据这一猜想,把全部节点放进一个优先队列,每次我们弹出来一个最优的,c最小,c相等时优先弹出来深度更大的,也就是子孙节点。若两个在同一子树, 必定一子一祖先,考虑把子孙节点增加,这样两两之间不会影响,再通过修改其他位置可以。首先是个构造题是不用多想的,CF构造题目要么是数学性质较多的构造,要么是“子问题分解型”原创 2023-01-20 21:59:05 · 82 阅读 · 0 评论 -
C. Garland - DP 贪心
设dp[i][j][k]为 前i段 ,使用了j个奇数,k个偶数时的最小答案, 枚举i,j,k与当前的奇数选择个数即可。分别对这三种情况进行研究,第一种的情况,若全部与x奇偶性相同,则必定贡献0,否则一定是1,绝对不会是2。那么就显而易见了,很重要的一点就是题目问的是数目,注意是数目,也就是不要往构造出这一整个序列方面去想。还要加上之前就有的,外加第二种情况的个数,细节很多,但理解之后就很容易调试了。第三种情况,易知最好是0,最差就是2,且只有2这一种情况。两端相同型 即 偶0000偶。原创 2023-01-20 21:06:03 · 66 阅读 · 0 评论 -
D. Task On The Board -构造
首先0是一个突破点,贪心的想,0的位置放上最大的,再用0的位置去更新没有更新的位置,这样周而复始即可,值得注意的是,我们每次的上届都应该比上一次要小,而不是单纯的找一个当前最大的。原创 2023-01-20 18:38:53 · 78 阅读 · 0 评论 -
B. Unmergen -布尔DP
这样一来我们就完成了对数组的分块,转化成了01背包选与不选的问题,最终看是否能组成n的长度即可。还是很巧妙的一道题目。首先应该发现的规律是,一个数字如果后面的数字比它小,那么它俩必须放在一组紧挨着的位置。并且该数字其后面一直遍历,知道一个比它大的出现,否则都应该加入这一组。8 1 4 3 2 这种都应该加进8这一组。原创 2023-01-20 17:37:18 · 96 阅读 · 0 评论 -
C. Uncle Bogdan and Country Happiness -数学 树形DP
还有一个条件就是好人是不增加的,那么就比对一个节点与其全部儿子节点好人总和,只要小于等于即可,注意是直系儿子节点,并非全部子孙结点。每个点是一定要被走sizeson次的,其中sizeson是其包含的住房数目,根据这一总和,列出一个方程。然后看是否能整除,正负性即可。原创 2023-01-20 16:46:46 · 117 阅读 · 0 评论 -
A. Boboniu Chats with Du - 枚举 -贪心
然后暴力枚举一下该选几个禁言的,显然需要从大到小更优,而且其安排规则体现了贪心的思想。把小于等于m这些不会带来禁言的放在一组,把剩下的大于m的放在一组。显然优先用大于m的这些进行填充,然后不够了再用小于等于m的进行填充。然后是1个,那么就是在小于等于的集合后面加一个最大的即可。然后是2个,也就是第一个后面放d个做填充,再放第二个。首先是0个,那么显然是全部小于等于m的累加即可。原创 2023-01-20 15:34:35 · 79 阅读 · 0 评论 -
B. Stoned Game 博弈论
数据范围很小,可以直接找结论也可以模拟,那就是每次都选择上个人没选择的最大的,至于证明,不会。原创 2023-01-20 12:40:21 · 114 阅读 · 0 评论 -
D. Colored Rectangles -DP 排序
显然是优先大的配大的,故从大到小排序一下,然后进行DP,本次可以由 i-1, j-1, k-1 三者分别进行承接,也可以用 i-1&&j-1 , i-1&&k-1 ,j-1&&k-1进行更新,至于 i-1&&j-1&k-1 是劣与前两者的,不必考虑。特别注意的是,DP枚举的范围应该有0,否则过不去样例2。原创 2023-01-20 12:09:40 · 63 阅读 · 0 评论 -
D. Maximum Distributed Tree - 树 贪心
特别的,在树上考虑的时候,只需要考虑每个非根节点的儿子个数与 n-儿子个数的乘积即可,这样就获得了n-1个点代表的n-1条边的实际贡献,接下来就是一个分配的贪心问题了。m>n-1时,我们可以做到没有1出现,那么就不让他出现1,考虑把前m-(n-1)个最大的因子都怼到贡献最大的那条边上,注意是因子乘积,否则能过样例不能过test 2。当m原创 2023-01-20 11:53:31 · 57 阅读 · 0 评论 -
E. Two Platforms -前缀和后缀和
很显然这两个区间是不能相交的,那么就暴力枚举左区间的终点,这个用前缀和即可,那么右区间就用后缀和可以达到。原创 2023-01-19 18:01:49 · 76 阅读 · 0 评论 -
D. Rescue Nibel! -树状数组 组合数
进行排序之后,按照左端点升序排列,那么也就是只需要满足前面的右端点大于本位置左端点即可,因为本位置左端点一定是大于等于前面左端点的,也就是左端点的最大值。那么只需要快速计算出来前面有多少个右端点大于等于本位置左端点就可以利用组合数求出来其中k-1个即可。考察较为综合,但都比较套路。首先两个区间有交集的条件是其左端点的最大值小于右端点的最小值,那么推广到多个区间时,也是这个道理。原创 2023-01-19 16:03:29 · 93 阅读 · 0 评论 -
E. Rock, Paper, Scissors -网络流
1 2 3代表第一个人出的 4 5 6代表 第二个人出的,超级源点连接 1 2 3分别是流量为数量,花费为0 ,1 2 3分别连接 4 5 6,流量为无穷,花费仅在胜出时为1,否则是0,这样最终我们的花费就是胜场辣!4 5 6连接超级汇点,流量为数量,花费为0即可。在满流的情况下,第一个人与第二个人一定是一一对应的,恰好花费完成。剪刀石头布问题用网络流解决很方便,第一问求最小的获胜局数,那么就超级源点汇点0,7。其实第二问也可以用网络流,但是贪心的方法就是取三个min即可。原创 2023-01-19 15:10:25 · 123 阅读 · 0 评论 -
C. Chef Monocarp - 费用流
很显然的套路就是对人建立n个点,然后对数轴 1--2n建立虚点,并拆开虚点,来保证每个时间点只能用一次,且虚点之间的花费应该是1,然后把每个人的a[i] 直接连接在数轴的虚点位置上,且花费为0,这样就把人引进了数轴里面,然后无论向左走还是向右走,都是花费的正值,合起来就是绝对值了。原创 2023-01-19 13:39:01 · 89 阅读 · 0 评论 -
A. Extreme Subtraction -差分
把全部数字变成0的言外之意就是a[1]等于0,且差分数组全部为0,那么两个操作分别对应了,a[1]-- a[k]++ 与 a[k]--,显然第二个操作可以任意次消灭大于0的差分数组,第二个操作就难免与a[1]联系到一块,也就是全部小于0的数字都指望着a[1]来--,所以统计一下绝对值的和与a[1]比较一下大小即可。原创 2023-01-19 12:34:18 · 60 阅读 · 0 评论 -
B. Identify the Operations - 找规律
要想删除当前pos位置的数字,pos两侧的数字要么是和b数组无关的,要么是已经被放进c里面的数字,所以考虑打标记的做法,对于b中有的,先事先打好标记,放进去一个我们就取消这个数字的标记,每次判断的时候,看两侧的可能性,也就是未被标记数字的个数即可。手玩一下样例,发现几个规律。原创 2023-01-19 12:11:08 · 69 阅读 · 0 评论 -
B. Catching Cheaters
反正CF给的式子能不用就不用,一定要转化。4LCS -C -D= 2LCS - (C-LCS)- (D-LCS)然后就套LCS的模板,也就是LCS增加1时,对答案的贡献为+2,否则对答案贡献为-1。注意LCS的模板 一个if就够了,不要手欠再写个else ,否则会WA6。原创 2023-01-19 11:33:09 · 65 阅读 · 0 评论 -
D. Rating Compression - 单调栈 前缀和
首先如果要出现 k的长度所构成的是一个排列,那么势必包含1- n-k+1,这些数字被包含的条件就是,1 --- n-k+1 的数字都在k长度区间里面做了一次最小值, 所以如果我们要求长度为k区间构成的排列,应该先预处理出来1 -- n-k+1的数字,看看是不是都满足情况。这样我们先利用单调栈来维护每个数字所支配的区间,对这个数字维护的区间长度取最大值。再对全部数字维护区间的长度取最小值,这样对于1--pos, 如果其前缀最小值大于等于n-pos+1,那么k= n-pos+1这个长度是可以输出1的。原创 2023-01-19 10:58:49 · 96 阅读 · 0 评论 -
F. The Treasure of The Segments - 树状数组 - 离散化
那么考虑如何涉及这一算法,考虑左端点从小到大排序,那么对于排在当前区间前面的,其左端点都小于等于他,我们再只需要满足左端点小于等于右端点即可保证相交,对于排在其后面的,左端点大于等于本位置左端点,我们只需要保证本位置右端点大于等于其左端点即可。那么我们可以用两个树状数组,对于“ 左端点小于等于右端点即可保证相交 ” 这一条件,构造前缀树状数组,并依次添加,对于 “本位置右端点大于等于其左端点即可” 这一条件,事先构造后缀树状数组,并依次减少即可。另外用到了离散化技巧,把左右端点全部加入离散集合。原创 2023-01-19 09:56:05 · 96 阅读 · 0 评论 -
C. Busy Robot - 模拟,细节
模拟题,只需要记录当前出发点,目标点,出发时间,到达时间即可,细节较多,不过题目很人性,基本上样例过了就能过掉全部情况,不要忘了龙龙。原创 2023-01-18 23:11:37 · 89 阅读 · 0 评论 -
E. Apollo versus Pan - 二进制 ,公式变换
sumi sumk (ai and aj) (aj or ak) 这一式子的含义就是 对于每个i, 求出来一个 (ai and aj) (aj or ak)这样就OK了, 枚举j ,a[j]的每一位,如果是1,那么对于sumi这一部分,只会原来是1的才有贡献, 对于sumk这一部分,会有n个这种贡献。这种题显然是O(n)的,也就是枚举i,j,k的其中一个就能获得答案,很显然枚举j会比较好,因为j连接,ik。然后求和,其实也就是 可以提出来。求和符号以下用sum代替。0的同理,讨论一下就行了。原创 2023-01-18 20:15:42 · 66 阅读 · 0 评论 -
D. Cleaning the Phone - 暴力, 二分查找,贪心
本题div3 D 评1800的可能性为,大部分人是考虑的分条件贪心,导致条件不充分最终没有过掉。首先来说,选1还是选2,一定先选价值高的,故可以分别排个序。另外就直接暴力吧,枚举选了几个1,二分查找该选几个2.而暴力,只要时间允许,就是王者。原创 2023-01-18 19:04:58 · 264 阅读 · 0 评论 -
A. Nezzar and Board - 裴蜀定理 -数论 -gcd
得a8 = 2a5- a7 = 2a5-a1-2(a1-a2)+(a1-a3) =a5 +(a5-a1) -2(a1-a2) +(a1-a3)得a7= 2a6-a3 = 2(2a1-a2)-a3 = 4a1-2a2-a3 = a1 + 2(a1-a2) - (a1-a3)我们只需要 a2-a1 a3-a2 a4-a3 a6-a4 a7-a6就能表示出来全部六个数字两两相减的结果!手玩几次不难发现,我们最终新产生的,就是原数组的ai + 若干 (aj-ak), jk为原数组的下标。原创 2023-01-18 18:16:48 · 135 阅读 · 1 评论 -
D. Zookeeper and The Infinite Zoo- 打表 二进制
最反感这种caodan的打表题,打表可以发现,我们每次加的是本数字有的,加完之后是一个进位操作,也就是一个数可以衍生出来无数个数字,这些数字的二进制为1的数位一定少于等于原数,且都是进位或者保留得来的,那么只需要看原数与要转化的数字二进制位即可。原创 2023-01-18 13:52:39 · 79 阅读 · 0 评论 -
A. Going Home - 数据题
这题突破点在于数据, a[i]+a[j]最多 5e6种情况,也就说明我们n巨大时,枚举到1e7这种级别之内,一定会有一个重复值出现,那么就直接n^2就OK了。原创 2023-01-18 12:11:53 · 89 阅读 · 0 评论 -
D. Explorer Space- 图论 DP
考虑DP做法,既然是原路返回,那么直接设DP[i][j][k]为 从i,j这个点走k步所消耗的最小值,转移为四连通块转移 dp[x][y][k-1] ,容易推算出这种情况是包揽全部情况的,包括走重复路径的情况。敲了个分层度想着能cao过去,没想到直接被卡死了,后猜测k可以跑一半然后原路范围,可是依旧T。原创 2023-01-16 23:08:11 · 91 阅读 · 0 评论 -
D. Armchairs - 网络流 费用流,Dinic,二分图匹配
建图方式就是 源点连接人,费用为0,流量为1,每个座位之间连接一个,费用为1,流量为无穷的点, 空位和汇点连接费用为0,流量为1的边,这样就保证了每个人都最多只有一条边流出去,每个空位置最多只有一条边流进来,比DP好理解一些。dinic 在一般图的复杂度为 n^2 * m ,可以处理1e4-1e5级别的图。在处理二分图时(源点-左集-右集-汇点),只需要 sqrt(n)*m的复杂度。网上是有思维加DP的解法的,但是有些不太好想,直接上网络流即可。而本题恰好是二分图,用网络流甚至比DP要快速。原创 2023-01-16 20:52:03 · 134 阅读 · 0 评论 -
D. Lost Tree - 交互 - 二分图染色
n个节点,n/2次,n-1条边,也就是一次询问获得两条边,自然考虑二分图染色法,任取一个点1作为根节点。每次询问与当前节点距离为1的点就是一条边,,由于我们强制要求了1号节点必须选择,我们二分图染色式询问时,应该事先统计一下那种奇偶性的节点最少,比如下图,强制1必须选时,虽然选奇选偶效果一样,但是还有一定差距的。原创 2023-01-16 16:21:08 · 97 阅读 · 0 评论 -
D. Playoff Tournament - 线段树 -建模
然后是单点修改操作,值得注意的是,我们这个单点修改的这个点,并不是具体的线段树最基础的叶子节点(具体的某个人),而是每场比赛,也就是线段树每个区间的编号,但是传统的自上而下查询的方法并不能帮我们定位到某个具体的区间编号,所以考虑自下而上的更新,获取比赛编号,每次除以2就获得了父亲节点,这样更新时log级别的,方便快捷。对结果的影响, 首先值得关注的一个性质是,我们构造的这个线段树,其左儿子的值一定大于右儿子,如果当前s值对应为 0,那么选择右儿子,1 选择左儿子,?就选择两者之和即可。原创 2023-01-16 14:56:15 · 173 阅读 · 0 评论 -
B. Integers Have Friends -双指针 同余 gcd树
考虑双指针做法,由于gcd的本质是对每个数的最大共有的因子,那么在数字越多时,gcd是呈现不升趋势的,言外之意就是,一个大区间的gcd若不为1,其内部子区间一定也不为1。这样我们可以设当前位置i为左端点时向右边最大扩展的位置为j ,也就是区间 [I,J]gcd不为1,当i++时,[i+1,j]也是满足gcd不为1的,完全可以顺承过来,体现了双指针的思想。这样问题就转化为了求出一个最长的连续差值区间,其区间gcd并不为1。两两作差会发现,其差值都是m的倍数,也就是gcd一定是不为1的。原创 2023-01-16 13:14:04 · 91 阅读 · 0 评论 -
C. Maximize the Intersections - 构造 -思维
猜想是一种固定格式的构造,不随原始弦的多样性而变化。首先无原始弦时,自然是 (n-1)*n/2个交点,构造方法是 每一个节点i 和i+n进行连接,这样获得的交点是最多的。猜测构造方法为 ,提取出尚未匹配的节点,将其抽象为另一个圆,由于节点之间距离并不等距,可以任意安排,所以一定会有上文规律个交点。毫无规律可循的题目,给出的原始弦千变万化,贪心,排序。原创 2023-01-16 12:01:22 · 64 阅读 · 0 评论 -
D. Lucky Permutation- 图论 -建模 -连通块
图论建模题目,我们把下标与ai值相连,那么在一个联通块的数字就是需要互相交换的。先不考虑使得逆序对的个数为1,考虑怎么样变成0,显然是完全归位时的情况,也就是连通块大小-1的和。那么就启示我们,我们最终归位之后,再交换一次相邻的就行了,然后我们会发现,过不了样例,原来是如果两个相邻的就在一个连通块的时候,我们是可以省去一次归位的次数的,这样就大功告成了。那么再考虑逆序对为1,是什么情况呢,手写几个样例会发现,是两个相邻的交换位置。1 3 2 4 , 1 2 4 3 , 2 1 3 4其余位置不变。原创 2023-01-16 10:30:08 · 110 阅读 · 0 评论 -
D. Array Differentiation- 图论 三进制 建模
这里的有环,指的是无向图意义下的有环。虽然我们这个环并非规则的顺时针,但是我们可以利用其顺时针时和为0来判断环的存在,一旦有环,边权是可以任意设置的,其效果仅仅是多出来一条边罢了。我们考虑三进制枚举,枚举每个ai的正负,0的情况,ai就是边,0代表其不在这一个环上面,1代表其为负数,-1代表为正数,一旦能满足是和为0,那么就一定可以组成一个无向图环,具体方向不必考虑。这是一道抽象模型题目,应该将题目中的减法结果为ai的关系设置为连边,b设置为节点,那么现在问题转化为了n个节点具有n条边。原创 2023-01-16 00:17:11 · 83 阅读 · 0 评论 -
D. Diane- 构造 -打表
首先猜测只需要两种字母,打表发现偶数是满足的,猜测奇数需要3种字母,打表发现也是满足的。特判1,否则白WA一次。原创 2023-01-15 15:55:16 · 85 阅读 · 0 评论 -
D. Take a Guess-Deltix Round, Summer 2021 (open for everyone, rated, Div. 1 + Div. 2) - 交互 位运算 排序
即x+y = 其二进制交集加上并集 ,那么完全可以用 2*(n-1)从询问获得 a1+a2 a1+a3...a1+an。外加2次询问获得 a2+a3 ,间接求出 a1+a1参与排序,得到位置k之后,将其值减去a1即可。AND OR运算 合在一起考察时多半考虑其组合性质 x+y =xandy+ xor y。原创 2023-01-15 13:50:00 · 163 阅读 · 0 评论 -
E. Polycarp and String Transformation- 思维 - 暴力 - 字符串
暴力优化为,对于当前遍历的字母,如果不是第一个删除的那么就在第一个答案串中加上该字母,如果不是第一个且不是第二个,那么就在第二个答案串中加上该字母,这是个可以用一个26次循环来达成,一旦中间不满足条件,立马终止即可。这样我们统计T的字母种类就获得了原字符串的字母种类。且容易发现,设每个字母在S中出现了cnt[x]次,那么 ,第一个被删掉的字母在T中出现了cnt[x]次,第二个出现了2*cnt[x]次,最后一个删除的字母,出现了 m*cnt[x]次,其中m为S中的全部字母种类。原创 2023-01-15 12:59:19 · 71 阅读 · 0 评论 -
Codeforces Round #743 (Div. 1)- A. Book 拓扑排序 DP
那么2是在3之前看到的,虽然看完3之后2也能被有效看到,但是必须等到下一轮,所以ans[2]=ans[3]+1。无解情况不能单独判断是否一开始没有0度节点,这是不正确的,应该是判环,即跑完拓扑排序之后看是否还存在非0度节点。设 3在第 x局被成功有效看到,那么接下来看4是也一定能顺手牵羊的也就是 ans[4]=ans[3]每次是从1看到n看, 只有看完前驱本次阅读才算有效,多画几个样例会发现如下情况。当然,这都是单前驱情况,实际情况是一个节点有多个前驱,那么取max即可。原创 2023-01-15 11:36:46 · 105 阅读 · 0 评论 -
F1. Korney Korneevich and XOR (easy version) - DP
根据异或的性质,其无论如果也不会超过500最高位以下(包括最高位)全满的情况,也就是512,这里不妨设为1000,限制给的很宽泛,很容易过去。那么只需考虑如何不会超时,可以发现的是,我们当前a[i]异或出来的值, 一定是来源于0--512的,那么我们只需要给每个异或值设置一个当前异或出来它的最后一个数的最小值即可,本次异或值是不受最小值具体值影响的,因为我们保证了其代表的子序列异或值确定。原创 2023-01-15 10:41:10 · 69 阅读 · 0 评论