Codeforces Round 940 (Div. 2) and CodeCraft-23
Codeforces Round 940 (Div. 2) and CodeCraft-23
前四题难度适中,总体还算不错,我想想都能做。E题考察威尔逊和质数筛前缀和算贡献。F题是数据结构,据说很版,还没补。
A题:题意:给出n个木棍,最多组成多少个多边形
Solution:统计各长度木棍的数量,全部贪心成三角形
B:题意:给出n和k,要求把k拆成n个非负整数,希望最大化n个数的或和的二进制的1的数量
Solution:对于n=1进行特判,无法拆分。从一般情况考虑我们只需要找到k的最高的二进制的位的数tmp=(1<<__lg(k))-1,和k-tmp,剩下的数全部为0.考虑这种情况的代价是把最高位的1消耗去获得低位所有的1.
上述贪心显然存在反例就是舒适就是二进制全1的,那么我们考虑特判这类数即可。代码实现过程中直接对两种构造的答案取max,谁大就用谁的构造方案
C:题意:人和电脑在正方形网格图里下国际象棋。人每次放白车,人放(x,y),电脑放黑车(y,x).如果人放对角线,电脑不回应,人继续先手。一个车所在一行一列不能出现第二个车。
现在棋盘大小,给出前k步棋谱,求最终局面有多少种局面
Solution:考虑给出递推的证明。首先注意到问题只和当前还有几行几列空闲有关,已经被占领的行无法对方案做出贡献。考虑现在填一个n行n列的空白棋盘。由于顺序与最终方案无关,所以根据任意性,我们假设考虑第一步就在第n行落子,也就是说第n行的落子可能是在第j步,当前钦定第一步放,就去除了重复局面 对计算造成的影响。
D题意: ,求满足条件的x,y,z有多少对,其中
首先套路的,对于区间异或和提前预处理前缀异或和,考虑不等式成立条件,从 的二进制最高位考虑,当对应区间异或和该位为0的时候不等式成立。为0的条件的区间异或和两个端点需要同时为1或者为0.
所以我们可以预处理拆位的前缀和,后缀和,每次统计的是1的数量,0的数量作为补集也很好得到。
E:定义一种F运算,求
Solution:我们需要进一步变形上面式子
考虑对将组合数拆成阶乘,然后发现分子连续j项一定构成modj的剩余系,所以可以进一步化简成下取整形式。
- 考虑威尔逊定理,对于所有质数
- 对于所有大于4的合数,
因此我们需要计算对于固定质数j,不同的i对其的贡献,这里就是交换了求和次序。
对于固定j,不同的i造成的贡献如何快速计算?
一般地,对于i从kp到k(p+1)-1,他们的贡献是相同的,我们希望这段i每个数都加上-k modj的贡献,静态区间加我们使用差分维护贡献。最后我们求一遍前缀和得到每个i的贡献,再求一遍得到前n个数的贡献,也就是答案了
我们还需要对4进行单独计算,作为特例。
__EOF__

本文作者:爱飞鱼
本文链接:https://www.cnblogs.com/mathiter/p/18152161.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/mathiter/p/18152161.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!