1194E. Count The Rectangles
题意:
2D平面上给出若干条垂直或水平的线段,求共构成了几个封闭的矩形。
题解:
大概就是先把每行每列先做一个简单的线段处理(处理成若干连续段),然后维护一个从下往上的扫描线,并且在扫的时候对每个横坐标维护在它上面是否有连续的竖直线段,对于每个横线段(长度为1,即两个横坐标之间)维护在当前的扫描线下,是否有水平线段覆盖了这一段。然后每当铺上一条水平线段,就进行一次统计。由于数据范围较小,(应该)只要保证统计的复杂度不劣于(mathcal O(len))即可。
复杂度大概是(mathcal O((n + V)V))。
1194F. Crossword Expert
题意:
(n)个题, 按照第(i)题随机(t_i)或(t_i + 1)秒钟完成, 总共有(T)秒时间, 求做题数期望。
题解:
最基本的想法是考虑对于一个01序列,考虑其贡献。但是我们会发现后面有些1是没有用的。
我们可以考虑枚举有多少个题多花了1s完成的。(即有用的1的个数)
实际上,枚举个数后,我们不需要关心这些多花的1s究竟在哪些题上,这很关键。
清楚这件事情以后,我们就可以列出式子:
其中(f_i)为有(i)个题多花了1s完成的方案数,(m_i)为有(i)个题多花了1s完成,能完成的题数。
则答案即为
1194G. Another Meme Problem
待填。
1197D. Yet Another Subarray Problem
题意:
给出一个序列,求最大的一个连续子序列(a_{l..r}),满足
题解:
设前缀和数组为(s),即求
考虑(m)大小只有10,我们直接把原序列分成以(m)为大小的若干块。
大概做(m)次分块的样子,每次块起点不同。
对于一次分块,我们可以把每一块缩成一个点,设(t_i)是这个块内(s)的最大值,则本次分块的答案为
这个问题显然(mathcal O(frac {n}{m}))可以做。
然后对每次分块的答案取最大值即可。复杂度是(mathcal O(nm))的。
1197E. Culture Code
题意:
你有n个俄罗斯套娃,已知每个套娃的容积和体积,问有多少个子集满足:
这个子集是一个极大子集,即不能再添加其它的套娃到这个子集里;
在上面的条件下子集的套娃之间的间隙和最小。
题解:
感觉不就是一道normaldp吗……?真是nmdp……
1197F. Coloring Game
题意:
给出(n)个游戏,每个游戏都是相似的。
其中第(i)个游戏上面有(a_i)个格子,并且某些涂上了颜色。
Alice和Bob进行博弈,初始时在每个游戏的最后一个格子都有一个棒子,行动规则是
1.不能将某根棒子移出边界;
2.只能将某个棒子向前移动({1, 2, 3})格;并且如果当前格子涂有颜色,会有一些限制,使得向前移动的步数集合是({1, 2, 3})的子集。
问有多少涂色方案,使得最终Bob(后手)必胜。取模。
题解:
考虑单个游戏的SG值。如果我们知道了第(i)个游戏SG为(j)的方案数(f_{i, j}),那么就可以轻松合并了。(SG的值最大只有3,这很重要)
考虑如何求出这个东西。
设(dp_{i, a, b, c})为第(i - 2, i - 1, i)个位置SG分别为(a, b, c)的方案数。
由于(a, b, c in {0, 1, 2, 3}),所以可以把后面的(a, b, c)压成一维长为64的数组。
考虑从一个没有颜色的格子转移到另一个没有颜色的格子,转移始终是一样的,可以预处理出转移矩阵,然后做vector-matrix multiply
。
对于初始就有颜色的格子,由于比较少,只有1e3左右,所以直接在这些地方暴力转移即可。
复杂度是(mathcal O(n L ^ 2 log V + m L ^ 2))。其中(L = 64)为矩阵大小。
1190C. Tokitsukaze and Duel
题意:
一个01序列,Alice和Bob进行游戏,轮流操作,每次可以把连续(k)个全部变成0或1((k)是常数),最后把序列全变成0或1的人获胜。
问先手必胜还是后手必胜还是平局。
题解:
首先,如果Alice第一次操作后没有赢,那一定没机会赢了,因为Bob可以做无用操作,使结果不劣于平局。
除了这种情况,只有Bob可以在自己的第一次操作就赢下游戏。
那么Bob能否在自己的第一次赢下游戏,条件就是Alice第一次进行任意操作都是必败操作。
即对于Alice的任意一种操作,如将([i, i + k -1])变成0,那么要保证,区间([1, i - 1])或([i + k, n])这两个区间中有且仅有一个区间有1。
总复杂度大概可以做到线性。
1190D. Tokitsukaze and Strange Rectangle
题意:
平面上有若干点,求用一个U
形框一些点,问能框住的点集的种类数。
其中U
形是两条竖直射线和一条水平线段。
题解:
考虑从上向下枚举纵坐标,统计出纵坐标在当前扫描线上的点,横坐标有多少种,设为(s)。
可以说,答案的一部分就是(inom {s + 1}{2}),但是可能重复了统计了上一次扫描线统计(即上一次枚举纵坐标)的点。
设有(t)种横坐标是恰好在当前扫描线(枚举当前纵坐标)之前就存在的,则要减去(inom {t + 1}{2})的贡献。
直接上线段树+扫描线可以做到(mathcal O(n log V))。当然也可以先离散化一下。
1190E. Tokitsukaze and Explosion
待填。
1190F. Tokitsukaze and Powers
待填。