• codeforces口胡记录


    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 = inom{m_i}{i} 2 ^ {n - m_i} ]

    其中(f_i)为有(i)个题多花了1s完成的方案数,(m_i)为有(i)个题多花了1s完成,能完成的题数。
    则答案即为

    [frac {sum_i m_i f_i}{2 ^ n} ]

    1194G. Another Meme Problem

    待填。

    1197D. Yet Another Subarray Problem

    题意:
    给出一个序列,求最大的一个连续子序列(a_{l..r}),满足

    [sum_{i = l} ^ r a_i - k lfloor frac {r - l + 1}{m} floor ]

    题解:
    设前缀和数组为(s),即求

    [max {s_r - s_l - lfloor frac {r - l}{m} floor} ]

    考虑(m)大小只有10,我们直接把原序列分成以(m)为大小的若干块。
    大概做(m)次分块的样子,每次块起点不同。
    对于一次分块,我们可以把每一块缩成一个点,设(t_i)是这个块内(s)的最大值,则本次分块的答案为

    [max {t_j - t_i - k (j - i)} ]

    这个问题显然(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

    待填。

  • 相关阅读:
    [NOIP2018 提高组] 保卫王国
    CF 939F. Cutlet
    [USACO15JAN]Moovie Mooving G
    [NOIP2017 提高组] 宝藏
    花园
    [[清华集训2012]串珠子]
    帮助——状压
    R语言产生月末日期
    R for循环示例
    Spark scala String Array转为String
  • 原文地址:https://www.cnblogs.com/psimonw/p/11268872.html
Copyright © 2020-2023  润新知