zoukankan      html  css  js  c++  java
  • CF668 题解

    C

    可以考虑长度为 (k) 的区间右移一位造成的影响。

    所以可以得到 (s_i=s_{i+k}) 这个结论,所以其实只要构造出第一个长度为 (k) 的区间即可。

    对于第一个长度为 (k) 的区间上的每一位,判断能填 (0/1) 中的哪些数,如果 (0/1) 中的一个超过了 (frac{k}{2}) 或者存在矛盾就是无解。

    D

    考虑这个问题在链上的情况,如果说 Alice 追不上 Bob,大概是因为 (db>2 imes da),这样的话 Bob 可以在 Alice 来了之后马上跑路。

    如果 (db) 可能会大于 (n-1),只要把 (db)(n-1)(min) 就行了。

    对于树上的情况,只需要把 (db) 对树的直径取 (min)

    因为 Alice 先手,需要特判 Alice 可以一步追到 Bob 的情况。

    E

    如果只有一次询问操作,考虑怎么做这个东西。

    仔细思考一下,如果一个比较靠后的数当前没有消掉,那么之后一定再也消不掉了。

    所以最优策略就是每次取最后一个能消掉的,这里我只会用分块去找到最后一个合法的位置。

    对于询问的限制,首先右端点可以直接用数据结构维护,其实左端点只要用类似扫描线的思想也是能做的。

    F

    如果 (n) 是偶数,可以选择 First 并把 (i)(i+n) 分到一组去。

    这样的话得到的结果一定是 (frac{n(n+1)}{2}+kn equiv frac{n}{2} pmod n)

    如果 (n) 是奇数,选择 Second。

    可以把给出的点对连上边,再把 (i)(i+n) 连上边,这样就可以发现每个点的度数都是 (2),这个图仍然是一个二分图。

    所以一定可以取出 (mod n equiv 0,1,2 dots n-1) 中每个数各一次,这个值 (mod n equiv frac{n(n-1)}{2} equiv 0)

    可以这个玩意 (mod 2n) 就不一定为 (0) 了,但是可以发现全部数的总和为 (frac{2n(2n+1)}{2} equiv n pmod {2n}),所以只要取反就好了。

    G

    有点像网络流,而且网格图是二分图然后看起来挺可做的。

    然而问题是要么左右能流要么上下能流,一看就不是很好限制。

    正解是把网格图的边看成网络流中的点,网格图的边也是一个二分图,限制转化为两种边不能同时选,这个玩意就是个二分图独立集。

    所以跑个网络流就行了。

  • 相关阅读:
    LCA最近公共祖先Tarjan(离线)
    51nod 1135 原根
    51nod 1134最长递增子序列
    51nod 1130 斯特林公式
    51nod 1186 Miller-Rabin素数测试
    51Nod 1257 背包问题 V3
    另类求组合数
    Gym
    msp430项目编程45
    msp430项目编程44
  • 原文地址:https://www.cnblogs.com/skyh/p/13683981.html
Copyright © 2011-2022 走看看