
A
搞笑题,但是笔者赛时桶不清空,爆罚一发,笔者更搞笑。
简要题意
给出
- 选择一个
,然后令 ,再令 。
无法执行操作的人输掉,问先手是否有必胜策略。
思路
结论 1:若所有数是偶数,则先手必败。
证明 1:后手只需要和先手取同一个数,因为所有数的个数是偶数,所以后手一定可以取到,就一定可以获胜。
结论:只要
证明:先手取最大的出现次数是奇数的数,因为无法取
B
简要题意
nm 构史题面叫我怎么简要?
一个长度为
- 数组
的最大前缀位置(MPP)为满足 的最小的 。 - 数组
的最大后缀位置(MSP)为满足 的最大的 。
给出
- 大小为
; - 每个元素为
或 。 的 MPP 为 ,MSP 为 。
保证
思路
直接说做法,读者感性理解。
首先
同理,
这样构造可以满足所有
笔者赛时没有看到
C
简要题意
定义一个数组的 MAD 为这个数组中至少出现两次的最大数,如果没有的话,则 MAD 为
重复执行以下操作,直到数组
; - 建立一个大小和
相同的数组 ,将每一个 设置为数组 的 MAD,然后令 。
求出
思路
考虑手动模拟几组数据:
继续模拟,发现
; ; ; ; 。
像是整体在往右移动,我们再来手模一组:
; ; ; 。
上面的结论好像在第二步的时候失效了,但是通过第六感我们知道这个结论一定有用,于是我们来分析一下它的具体情况。
首先,第一次操作后生成的
然后我们分析一个单调不降的数组,将求 MAD 的过程看作往里面加数的过程,如果要使 MAD 更新成另一个大的数,因为数组单调不降,所以当前数必须出现至少两次。这样子我们得到的数组除了最大的一个数,其余每个数都至少出现了两次,并且整个数组单调不降。
然后手动推一下,发现这种数组符合之前发现的每次操作使数组整体右移一位的规律。正确性显然,因为除了最后一个数,每个数都有至少两个,因此不会被一回合操作吞掉,因为单调不减,所以这部分数
因此,直接暴力进行前两次操作,然后计数统计后面的贡献即可。
D
简要题意
有一个
- 第
行的前 个数是 ,其余数是 。
有两种操作:
- 将一个
的矩阵全部变成 。 - 将一行的数全部变成
。
求将整个矩阵变成
思路
显然,如果一行满足
否则我们分情况讨论:
:这时如果上面一行采用 染色方案,将这一行第 列染成 ,就不管,否则将这一行和下一行的第 列染成 ,标记下一行第 列然后答案 。 :如果这一行的 列都被标记,那么不管,但是这是不可能的,后面会详细说原因;如果只有 列被标记,那么将这一行与下一行的 列染色,答案 ;如果是 列被标记同理,将 列染色;如果一行都没有被标记,那么直接染色一整行显然不劣,因为如果下面一列大于 个或者一个都没有,这种做法会比只染当前一行浪费一次操作,而其余的情况可以通过染色下一行一次来达成,因此直接染色一行不劣。
直接模拟即可。
E
后面找时间补。