太菜了,游记也没什么好写的,全程都在打暴力;接着暴力还打挂,毫无悬念地被吊打了……
就这个水平,别说NOIP 1=了,CSP-S 1=都没啦
后来讲题听懂了两题,于是现在就开始写题解……
T1
首先,考虑一个十分显然的东西:如果一个数组能够两两配对,使得每个数都在恰好一个对里,且每对的两个数相等;那么显然先手会输。
原因显然,先手能做的事情,后手也能做,他只需要控制上述条件的成立即可。即,假设原序列为 1 1 2 2 1\ 1\ 2\ 2 1 1 2 2,先手通过操作第 3 3 3个数把它变成了 1 1 0 3 1\ 1\ 0\ 3 1 1 0 3,那么后手就把 3 3 3变成 0 0 0,其他不变,此时仍然满足要求。
因此,如果序列中的数有 n n n个数,且 n n n为奇数,那么显然先手会胜。即,先手先找到序列中最大的数,然后把它分出去,使得满足要求;这样后手就输了,他就赢了。
如果 n n n为偶数且满足上面的条件,先手必败;否则先手必胜。因为,先手同样也可以通过一次操作满足要求。例如,序列为 1 2 3 4 1\ 2\ 3\ 4 1 2 3 4,那么先手就对第 4 4 4个数进行操作,使整个序列变成 1 3 3 1 1\ 3\ 3 \ 1 1 3 3 1。
时间复杂度 O ( n ) O(n) O(n)。
T2
Matrix Tree定理表示不会,自闭了……
T3
50分: 二进制枚举+单调栈
我们枚举每一行是否被翻转,状态有 2 n 2^n 2n个。
然后,我们枚举长方形的下边界;然后扫一遍数所有的列,每次贪心地选择该列是否被翻转即可。
时间复杂度 O ( 2 n n m ) O(2^n nm) O(2nnm)。
100分: 缩点+单调栈
一道套路题,可惜比赛的时候没有主要去想这题,而一直在尝试优化 T 2 T2 T2容斥套容斥的 O ( 2 2 n ) O(2^{2n}) O(22n)解法。
我们类似缩点,对于每个田字格,如果田字格内有偶数个黑格子,那么对应的就是个 1 1 1;否则对应的就是 0 0 0。然后在对应的矩阵中面积最大的黑长方形就是答案,显然后者可以通过枚举下边界然后直接单调栈来更新答案。
为什么这样的解法是正确的呢?因为,即使一次操作涉及到一个田字格,黑格子数量的奇偶性仍然不变。而在一个黑色的长方形中,任何一个属于该长方形的田字格内的黑格子数量必须是 4 4 4个,而它是一个偶数。所以,我们可以这么“缩点”并求出新矩阵中最大的长方形。
时间复杂度 O ( n m ) O(nm) O(nm)。
总结
也并不是什么耻辱,这就是我的实力吧……
重点是全场人均切T1,然而我到现在只做过 3 3 3道博弈论的题目……就这么点刷题量,你说我 T 1 T1 T1能做得出来?
T 2 T2 T2本来想写 O ( 2 2 n ) O(2^{2n}) O(22n)的容斥套容斥的,后来觉得写法太烦,就偷懒打暴力来节省时间……结果暴力还打挂了QAQ
T 3 T3 T3套路真的见少了,还是刷题量不够的问题吧……
L u o g u Luogu Luogu刷了 734 734 734题了,估计到 1000 1000 1000题的时候, N O I P 1 = NOIP 1= NOIP1=就稳了吧。
我真的好菜啊……