Codeforces Round 940Div.2

数学场。

位运算+前缀和+数论(组合数学+威尔逊定理)

CF1957B A BIT of a Construction

题目信息

给定整数 ,构造一个由 非负数(即 )整数 组成的序列,使得

  1. 最大化 的二进制表示中的个数,其中 表示位向 OR 运算

题目分析

很快想到最终计算结果中1越多越好,但是最后想歪了。

最多的1肯定是离最近的二进制.这样一个数就可以全部盖满。而比赛时错误的想每一个数都提供一个二进制位,这样会造成一个风险就是不够填完,这样就寄了。

所以只需要两个数就可以完成,剩下的全填就可以了。

CF1957C How Does the Rook Move?

题目信息

给您一个 棋盘,您和电脑轮流在棋盘上分别放置白车和黑车。在放置车的过程中,您必须确保没有两只车互相攻击。如果两只车共用同一行或同一列,则无论颜色如何,都会互相攻击。

有效的一步棋是将一只车放在一个位置( )上,使它不会攻击任何其他车。

你先开始,当你在自己的回合中走了一步有效的棋,将白车置于位置( )时,电脑会照搬你的棋,在它的回合中将黑车置于位置( )。如果是 ,那么电脑就无法映射你的棋步,并跳过它的回合。

您已经与计算机下了 步棋(计算机也会尝试复制这些棋步),您必须继续下棋直到没有剩余的有效棋步为止。在 步之后继续下棋时,有多少种不同的最终配置是可能的?可以保证 步和隐含的计算机步都是有效的。由于答案可能较大,请打印出 的模数。

如果存在一个坐标( ),其中一个配置中有一个车,而另一个配置中没有,或者坐标上的车的颜色不同,那么这两个配置就被认为是不同的。

题目解析

问题不难转化成为在一个的空棋盘上面有多少种按要求放置棋子的方法。

由于棋子在什么位置放置不重要,这引发的一个问题就是:如果你在棋盘重点中间的某个位置放置棋子递推剩下的(放在非对角线位置)或者递推剩下的(放在对角线)局面,一定会和某个放在边缘线上的情况重合。

所以只需要按着棋盘边缘放置就可以。

这样​方程呼之欲出。 注意的边界条件是,根据的值不难得到。

AC代码

CF1957D A BIT of an Inequality

题目信息

给你一个数组 。求这样的元组 ( ) 的个数:

  • , 和
  • .

定义 ,其中 表示 bitwise XOR 运算

数据保证.

题目解析

现场就想到了转化成,但也就仅此而已了,因为不知道如何更快地暴力区间

首先没有想到的是,决定整个的是的最高位。

因为如果最高位为​,式子成立等号,不满足条件。

而如果最高位位置比大,不决定前面的所有位置,但是可以决定是否将位从调整成​.

其次没有想出来的(花费最大时间思考的),如何寻找满足条件的区间数对​​​?

显然,满足条件的区间应保证:

在区间内的所有数的第 位的 的数量应保证为偶数。

返回题目,对于第个数,找到其最高位的位置,查询包含第个数的区间个数。对的算法稍作修改即可。

AC代码

CF1957E Carousel of Combinations

题目信息

给定,求以下函数表达式: 多组测试样例保证不多于组,保证每一个 均不超过.

题目解析

问题在于怎么化简所求的函数式子。

:关于连续个数对的剩余系

显然,连续的个整数对求余的结果必然是一个的完全剩余系。或言之 :威尔逊定理

任意连续的个整数中,显然只有一个数是的倍数。所以有 讨论,注意到除4之外的所有合数的时候,必然有.

因为可以涵盖的所有因数,除了(最特殊的合数),因为,而中只有一个.

那么问题就转化成了对于所有的质数和4分析。 那么对于一个质数的贡献为以下规律数列: 每一个数均出现次。

涉及到区间修改问题,采用差分前缀和维护即可。

AC代码

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 栾博越
  • 访问人数: | 浏览次数:

      请我喝杯咖啡吧~

      支付宝
      微信