zoukankan      html  css  js  c++  java
  • 联考day7

    A:宇宙飞船

    发现最终合法的序列一定每一位要么放当前还未放过的最大值 要么放最小值
    那么如果确定一个终点 对于终点前面的点
    一定有一些是单调上升 另一些是单调下降的
    考虑枚举这个点 而不动的元素就是最长上升和最长下降序列长度之和减1
    所以直接跑最长上升子序列和最长下降子序列就可以了
    枚举每个点 更新一遍答案就可以了





    B:路径计数

    首先如果不考虑重复 答案显然是(2^n-1)

    因为长度一共为n 最多缩n-1次,每次缩都有两种方案

    答案为(2^0+2^1+2^2+2^3+...+2^{n-1}+2^n)

    然后考虑算重的部分

    只有连续重复的字符会算重

    先把一段连续字符原来的贡献去掉

    再把这段字符真正的贡献加上

    首先去掉原来的贡献

    设这段极长的连续子串的左端点为l,右端点为r,长度为len

    那么原先的贡献应该为(sumlimits_{i=l}^rsumlimits_{j=i}^r C(i-1+n-j,i-1))

    这个发现在i固定的时候,组合数的答案是杨辉三角中连续的一列

    所以可以优化成(O(n))

    然后考虑加入新的贡献

    假设该子串为baaaaab

    给a编号为12345

    容易发现到a2a3a4的方案数其实就是到a1a2a3a4的方案数加上到a2a3a4a5的方案数

    它和其它方案数的差别在于 到达a1a2a3a4这个状态之后 到达a2a3a4的路径是唯一的

    并没有左右二选一去缩

    所以中间的子串是没有贡献的 或者说可以直接并到两边的子串 乘系数来得到它的贡献

    那么就可以固定左端点 然后去求右端点在l,l+1,l+2,...,r-1的贡献

    以及固定右端点 然后去求左端点在r,r-1,r-2,...,l+1的贡献

    以左端点为例,先固定左端点左边的一个字符不能消掉,然后剩下的随便消

    那么答案其实就是C(l-2+n-i,l-2)

    右端点同理

    然后这个东西直接O(n) 做就可以了

    最后统计上原串整个的贡献




    C:树和森林

    咕咕咕




    D:编码

    咕咕咕

    如初见 与初见
  • 相关阅读:
    博客园停更...
    Linux-常用命令汇总
    Linux-目录结构
    Mysql-python连接操作数据库
    Mysql-概念及常用命令
    Mysql-Sql查询汇总
    Mysql-Sql增删改查
    Mysql-Navicat破解使用
    Mysql-环境配置及问题解决
    Fiddler-AutoResponder替换资源
  • 原文地址:https://www.cnblogs.com/HISKrrr/p/13909416.html
Copyright © 2011-2022 走看看