Educational Codeforces Round 148 (Rated for Div. 2)
1|0Preface
补题,这场比较简单,E之前的都能写出来,当然D的细节挺多的WA了好几发
感觉时间好不够用啊,想补的题那么多但效率好低,可能要等暑假才能集中攻克了
2|0A. New Palindrome
统计下出现了一次以上的字符有几种,如果大于等于两种就有解
3|0B. Maximum Sum
直接枚举最后取了多少次最大值,然后取最小值的次数也是知道的,贡献用前缀和算一下就行
4|0C. Contrast Value
不难发现如果原序列中存在三个相邻的数之间有或,则中间那个就可以被删去
具体实现的话可以记录一下相邻两数之间的大小关系,如果相等就直接忽略,否则和上一次的对比下即可
5|0D1. Red-Blue Operations (Easy Version)
首先要求最小值最大一眼二分答案,然后考虑如何check
首先很容易发现一个数被操作偶数次后值一定减小,操作奇数次一定增大
同时增大的最大情况就是只操作一次,比如只对某个位置进行一次操作是理论上能得到的最大值,否则由于排除掉最大的这次操作后剩下的操作为偶数,一定会让增量减小
因此就有了一个贪心的思路,给所有数从小到大排序后,给所有小于的数先只加上最大的可能增量
然后考虑剩下的操作如何安排,不难发现把它们两个一组打包作减法是影响最小的,看下剩下的余量能否满足要求即可
但是还有各种边界情况,比如当初始时大于等于的数有两个及以上时是一定合法的(因为偶数次操作可以被拆分为若干次奇数操作,增量一定是正的)
然后就很容易写出一个check
的代码,足以通过本题(后面D2就是直接在D1的代码上优化的,因此一定要理解这里的思路)
6|0D2. Red-Blue Operations (Hard Version)
有了上面的代码其实优化就非常显然了,我们发现找小于的位置可以二分,后面算贡献可以拆分一下式子直接算
唯一需要注意的是就是由于可能有相邻的数,因此在第一步检验每个数是否能做一次操作来大于等于的过程中要找一个最小的位置,这个可以预处理一下
然后就没啥了,总复杂度就是
7|0E. Combinatorics Problem
怎么会有这么简单的数学题的说,我感觉就是一个Div2C题的难度顶天了
处理组合数的贡献的经典方法就是差分(或者说根据组合数的递推公式),由于,因此我们发现当增加时增量可以用之前的某些东西来表示
具体的,设表示当时的值,稍微手玩一下很容易得到转移:
后面的那个其实就是,因为时不能直接把加入的贡献中
总复杂度
8|0Postscript
感觉好久没现场打CF的比赛了,还是要跟进一下不然手生了就很难受
__EOF__

本文链接:https://www.cnblogs.com/cjjsb/p/17425534.html
关于博主:复活的ACM新生,目前爱好仅剩Gal/HBR/雀魂/单机/OSU
版权声明:转载请注明出处
声援博主:欢迎加QQ:2649020702来DD我
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2019-05-23 CF 1119F Niyaz and Small Degrees
2018-05-23 【LGR-047】洛谷5月月赛