zoukankan      html  css  js  c++  java
  • 杂题

    题意

    给定一个长度为(n)( ext{01})序列,可以将序列分成若干块(每个位置恰好属于一个块),使得每个块和为奇数,对于(iin[1,n]),求每块长度(le i)最少可以分成多少块。
    (nle 1e6)

    做法

    假设每块长度不超过(m)

    令原序列为({a_i}_{i=1}^n),令(b_i=igopluslimits_{j=1}^i a_j)

    那么就是从(0)(n),每次跳的位置不用于当前的(b_i)

    观察1:若当前在位置(i),最优解一定为这两种情况:
    (1)((i,i+m])内离(i)最远的,不同于(b_i)的位置。
    (2)假设(1)的位置为(j),最大的(k(b_k=b_i))使得((i,k))存在不同于(b_i)的。

    那么可以在预处理后,单次(O(n))次求解。

    观察2:若存在解,则最少步数(le 3lceilfrac{n}{m} ceil)

    观察3:若(i)存在解走到(n),那么每次走(2)必定能走到,且步数(le 3lceilfrac{n-i+1}{m} ceil)

    现在,我们得到了一个(O(n/m))单次判断是否存在解。

    观察4:若在(i)走(1)能到达(n),那存在最优解在这一步走(1)。

    现在,得到了一个单次(O((n/m)^2))求解:即每次(O(n/m))判断(1)位置是否可以到达(n),若可以则走,否则走(2)。

    结合(O(n))的做法,得到了一个(min(n,(n/m)^2))(sumlimits_{m=1}^n min(n,(n/m)^2))(O(nsqrt{n}))级别的。

    (O(nlog n))预处理出点(i)走到(n)最小的(m)是多少,则可以单次(O( ext{最优步数})),总复杂度(O(nlog n))

  • 相关阅读:
    MT4 图表上设置字符
    MC- 交易并设置止损
    MC- 挂单STOP交易
    MC-设置 止盈
    MC 跨周期 画线
    美版MC 使用
    改变和恢复view的方向
    app被Rejected 的各种原因翻译。这个绝对有用。
    更改navigationController push和pop界面切换动画
    线程访问外部数据
  • 原文地址:https://www.cnblogs.com/Grice/p/14866702.html
Copyright © 2011-2022 走看看