zoukankan      html  css  js  c++  java
  • 模拟16

    模拟16

    T1

    感觉好像需要容斥但是发现有点难搞,所以就只算了全是问号的情况,正解的确是(DP)加容斥。

    每一行中黑白块一定是各占一半或者是只有一种的,于是可以将它分为四种情况,黑在(左上,左下,右上,右下),但是好像有点繁琐,可以改成,黑在左侧,且黑白分界线单调不降,或者单调不升,黑在右侧,且黑白分界线单调不升。

    先考虑全是问号的情况,显然可以用前缀和优化直接(N^2)做,但是如果有限制,转移需要条件,所以加一个辅助数组,用(vis[i][j])表示第(i)行,(1-j)填黑,剩下的全填白是否合法,(vis[i][0])即表示全填白,(vis[i][m])表示全填黑。

    当且仅当(vis[i][j]==1)的时候再进行(dp)的转移。

    最后考虑容斥,重的情况仅有可能是某一列全是黑,这样单调不升和单调不降都算了一次,统计这样的列数然后减掉。

    还有就是全是黑的或者全是白的,如果有这种可能那么必然会算四遍,所以有一种就减(3)

    T2

    容易发现中间的段如果有未匹配的左括号,那么一定在序列右侧,如果有未匹配的右括号,那么一定在序列的左侧,所以可以知道左侧的括号段中未匹配的左括号数量的下界,于是就可以枚举了。

    T3

    一个比较神奇的(DP),首先知道分解后二的次数即二进制下末尾连续(0)的个数,然后就可以状压了,对于乘(2)的操作,相当于左移一位,维护信息比较好维护,但是加法就不是很好维护了,因为会有进位的情况,只有连续的加法进位会导致出问题,并且如果只进了一位是没有影响的,所以可以将后八位状压,这样进位最多只会进一位,注意这里说的进位是连续加法进位,只要有一个左移维护的信息就不会错。

    T4

    如果是一个奇环,那么一定不可行,因为最后会缩成三元环,这样任意两个点之间都没办法缩了,剩下的如果是偶数环,那么一定可以缩成一条链,对于环上,可以钦定两个点为链的端点,这条链的长度一定不超过这两点间的最短距离,于是就知道对于每个联通块,任意两点间最小距离的最大值就是贡献。

  • 相关阅读:
    单向认证
    电商积分支付系统构建经验与总结
    python decimal.quantize()参数rounding的各参数解释与行为
    mysql 由decimal 引起的 Warning: Data truncated for column
    aliyun centos14.04 trusty 上安装docker1.12.1
    使用 py.test 对 python 代码进行测试
    mysql常用增删改查命令(纯纪录.orm用得基本功都没了。)
    python 协程库gevent学习--gevent数据结构及实战(四)
    http请求头中的content-type属性
    坚持做技术写作
  • 原文地址:https://www.cnblogs.com/anyixing-fly/p/13821644.html
Copyright © 2011-2022 走看看