题目:2024.9.23 题目
依依寺
有 个数,现在有两个人在轮流选数,无数可选或选了之后选择的数的和为 的倍数的人输,两人都使用最佳策略,问你哪个人能赢。
首先,这道题里面的 起到的是交换双方的作用,也就是说,这一步我不出等同于下一步你出的就是我出的,因此当 的数量为偶数时,它完全没有作用;只有当 的数量为偶数时,它才会交换双方。
其次,由于两个人都会按照最优方式取数,因此我们只需要思考它们最多能够持续多久。经过「短暂」的思考后,我们可以想到,一共两种方式: 或者是 。因此答案就显而易见了,我们只需要求出最后一个出牌的人是谁,那个人就是胜者。时间复杂度 。
武义寺
给定 ,令 等于最小的 满足 。对于长度为 的 个排列 ,求 。
我们枚举 的答案为 ,那么 必须 且对于任意 必须 。我们枚举 使得 ,令 ,然后考虑前 个数又多少种选择。
由于我们已经在位置 填上了 ,因此位置 可以选择 个数,位置 也能选择 个数(有一个数被 占了)。一直到位置 ,这是我们突然发现不能选已经被选过的 了,因此它和它前面的数都只能选 个。因此,前 个数的方案数为:
此时答案已经于 没有关系了,因此我们可以只枚举 。接下来我们枚举 ,通过简化,我们可以得到最终的和为:
由于题目当中要求我们求期望,并且我们没有考虑答案为 的特殊情况,因此我们需要将这个和加上 之后除以 。另外,题目当中要进行有理数取余,可以使用快速幂法求得。时间复杂度为 ( 为模数)。
依久依久
令 ,对于任意一个正整数 ,可以将其分解成唯一的 的形式,设 ,给你 组数据,每组数据为 的形式,求 。
首先,对于一个数 ,我们需要考虑对它的分解。经过好渴鹅的深思熟虑,可以发现令最大的 使得 ,那么 的分解里面必定会有 。
现在我们需要求 。通过差分,可以将其转化为 。我们可以使用一个函数 来求这个数。我们知道,两个相同的数进行异或,结果为 ;而 跟任意数异或结果就是那个数。因此对于 ,我们同样找到一个最大的 使得 ,然后此时会有 这 个数会取到 ,我们只需要判断一下奇偶性就行了(奇数时额外异或 )。然后对于这些可以取到 的数,它们通通减掉了 ,因此答案需要异或上 。其它没有取到 的数,需要继续进行计算,因此答案需要异或上 。
也可以直接求 的和,但是代码会复杂一点,思路几乎一样。
由于斐波那契数列的第 项是最大的小于 的数,因此令 ,该算法的时间复杂度为 。
补幺梨
有 种纸币,每种纸币无数张,最大面额不超过 ,第 种纸币面额为 ,现求一最大值 ,使得无法使用这 种纸币拼凑出 。
好渴鹅不会这道题目,所以使用的是完全背包来找最小值(正解是同余最短路)。鹅的目标是骗够 分,因此时间复杂度为 的完全背包中的 最大可以到达 ,也就是可以输出的答案最多是这个数。
令 设为能否凑出 的金额,那么对于任意的 ,我们可以使用 的金额来不足,即 。最后找到最大的 ,使得 ,输出这个 就行了。
炸裂的是,这个原本应该 分的代码最后得了 分。
总结
- 排名:;
- 比赛分数:;
- 情况:超预期;
- 问题:不会同余最短路。