题目:2024.9.23 题目

依依寺

个数,现在有两个人在轮流选数,无数可选或选了之后选择的数的和为 的倍数的人输,两人都使用最佳策略,问你哪个人能赢。


首先,这道题里面的 起到的是交换双方的作用,也就是说,这一步我不出等同于下一步你出的就是我出的,因此当 的数量为偶数时,它完全没有作用;只有当 的数量为偶数时,它才会交换双方。

其次,由于两个人都会按照最优方式取数,因此我们只需要思考它们最多能够持续多久。经过「短暂」的思考后,我们可以想到,一共两种方式: 或者是 。因此答案就显而易见了,我们只需要求出最后一个出牌的人是谁,那个人就是胜者。时间复杂度

武义寺

给定 ,令 等于最小的 满足 。对于长度为 个排列 ,求


我们枚举 的答案为 ,那么 必须 且对于任意 必须 。我们枚举 使得 ,令 ,然后考虑前 个数又多少种选择。

由于我们已经在位置 填上了 ,因此位置 可以选择 个数,位置 也能选择 个数(有一个数被 占了)。一直到位置 ,这是我们突然发现不能选已经被选过的 了,因此它和它前面的数都只能选 个。因此,前 个数的方案数为:

此时答案已经于 没有关系了,因此我们可以只枚举 。接下来我们枚举 ,通过简化,我们可以得到最终的和为:

由于题目当中要求我们求期望,并且我们没有考虑答案为 的特殊情况,因此我们需要将这个和加上 之后除以 。另外,题目当中要进行有理数取余,可以使用快速幂法求得。时间复杂度为 为模数)。

依久依久

,对于任意一个正整数 ,可以将其分解成唯一的 的形式,设 ,给你 组数据,每组数据为 的形式,求


首先,对于一个数 ,我们需要考虑对它的分解。经过好渴鹅的深思熟虑,可以发现令最大的 使得 ,那么 的分解里面必定会有

现在我们需要求 。通过差分,可以将其转化为 。我们可以使用一个函数 来求这个数。我们知道,两个相同的数进行异或,结果为 ;而 跟任意数异或结果就是那个数。因此对于 ,我们同样找到一个最大的 使得 ,然后此时会有 个数会取到 ,我们只需要判断一下奇偶性就行了(奇数时额外异或 )。然后对于这些可以取到 的数,它们通通减掉了 ,因此答案需要异或上 。其它没有取到 的数,需要继续进行计算,因此答案需要异或上

也可以直接求 的和,但是代码会复杂一点,思路几乎一样。

由于斐波那契数列的第 项是最大的小于 的数,因此令 ,该算法的时间复杂度为

补幺梨

种纸币,每种纸币无数张,最大面额不超过 ,第 种纸币面额为 ,现求一最大值 ,使得无法使用这 种纸币拼凑出


好渴鹅不会这道题目,所以使用的是完全背包来找最小值(正解是同余最短路)。鹅的目标是骗够 分,因此时间复杂度为 的完全背包中的 最大可以到达 ,也就是可以输出的答案最多是这个数。

设为能否凑出 的金额,那么对于任意的 ,我们可以使用 的金额来不足,即 。最后找到最大的 ,使得 ,输出这个 就行了。

炸裂的是,这个原本应该 分的代码最后得了 分。

总结

  • 排名
  • 比赛分数
  • 情况:超预期;
  • 问题:不会同余最短路。