zoukankan      html  css  js  c++  java
  • CF1239

    Codeforces Round #594 (Div. 1)

    A

    考虑只有一行且第一个格子为白色时,每次可以填连续相同颜色的一个或两个格子,因此其方案数为斐波那契数列,因为还有黑色,还需乘 (2)。一行确定后,其下一行必须填反色的情况,除非当前行为黑白相间的情况。第一行黑白相间时,对于列的确定也就是斐波那契数列了。得答案为 (2(f_n+f_m-1))

    B

    (s_i) 为前缀左括号减右括号个数,当满足 (forall i in [1,n] s_i geqslant 0 and s_n = 0) 时,其对应的括号序列是合法的。对于任意的括号序列,其循环移位的合法括号序列个数为 (s_i) 中最小值出现的个数。可以画出 (s_i) 对应的折线,通过图像平移就能发现该结论。

    交换同种括号没意义,交换 ())(() 会使一个区间的 (s_i)(2),其只会让最小值个数变小,因此只用考虑交换 ())(() 的情况。交换 ())(() 会使一个区间的 (s_i)(2),当该区间跨过一个最小值的位置时,最小值个数会变小,因此交换 ())(() 作用的区间一定为两个最小值之间的区间。

    设原先的最小值为 (v)。可能是使区间内的 (v+1) 变成 (v-1),让 (v-1) 的出现次数贡献给答案。也可能是让一个没有出现 (v+1) 的区间内的 (v+2) 变成 (v),加上原先 (v) 的出现次数贡献给答案。(O(n)) 扫一遍即可统计。

    C

    直接模拟题意,发现需要查询小于一个数且下标最小的位置,线段树二分即可。

    也可以用 (STL) 的一些东西维护。

    D

    发现 (i) 不可能同时为人和猫。将给出的信息进行连边,边的含义为若当前点为人,其指向的点都不能为猫,那么在同一个强连通分量内的点要么都是人,要么都是猫。缩点后在 (DAG) 上任选一个入度为 (0) 的强连通分量作为猫,其他点作为人即可。

    E

    最优情况一定是第一行权值 (a_i) 递增,第二行权值 (b_i) 递减。考虑两条拐点相邻的路径,设其中一条路径的拐点在位置 (i),另一条路径的拐点在位置 (i+1),得两条路径的权值差为 (Delta_i=| a_{i+1}-b_i |),因为 (a_i) 递增,(b_i) 递减,得 (Delta_i) 的图像为:

    因此将最小值放到左上角,次小值放到右下角后,权值最大的路径的拐点只可能为 (1)(n)

    那么问题就转化为了把权值分配给两行,使两行权值差最小,背包解决即可。(DP) 值记录选择的情况,可以方便构造方案。

    F

    称模 (3) 意义下,度数为 (0) 的点为 (0) 点,度数为 (1) 的点为 (1) 点,度数为 (2) 的点为 (2) 点。

    考虑合法情况只有下列四种,且每种情况最后保留的点不能是所有点:

    保留 (0) 点。

    保留两个端点为 (1) 点,其余点为 (2) 点的链。

    保留由 (2) 点构成的环。

    保留两个不相交的 (2) 点的环,且经过同一个 (1) 点,即两个环有一个公共点,该点为 (1) 点。

    然后根据这四条判定即可。

  • 相关阅读:
    ts笔记-辨析联合类型
    ts笔记-类型兼容性
    ts笔记-never和void
    ts笔记-泛型
    ts笔记-类型断言
    ts笔记
    ts笔记
    ts类型-枚举
    ts笔记-类型声明
    ts笔记-类型系统
  • 原文地址:https://www.cnblogs.com/lhm-/p/13755748.html
Copyright © 2011-2022 走看看