zoukankan      html  css  js  c++  java
  • Codeforces Round #757 (Div. 2)

    solved: 4/5

    A:

      贪心, 从小到大拿, 在范围内就拿, 直到拿不了位置

      这个n就100是不是想吓唬我

    B:

      贪心, 把次数拉出来, 优先分配1的给他, 可以注意到1可以分配两次, 2可以分配两次……

      然后把x0放在1..n+1的中心就可以了

    C:

      拆位考虑, 对于第k位(从低到高), 假设上面有cnt个1, 那肯定有n-cnt个0

      要使子序列的异或值为1, 那么肯定是由奇数个1和若干个0组成

      那么也就是从挑奇数个1搭配若干个0, 答案是$2^{cnt-1}2^{n-cnt}=2^{n-1}$

      这一位为1, 实际上是$2^k$

      然后考虑一下, 构造原序列

      她说l..r的or值为x, 那么假设x的第k位为1, 则第k位上至少有一个1, 1的数目我们是不关心的, 只要关心有没有就够了

    D:

      观察那个式子, 定义$a[i]=gcd(a_1,a_2..a_i)$

      可以发现$a[i+1]|a[i]$

      那么就好办了, 定义f[i]为以i为gcd结尾的最大长度, g[i]表示以i结尾的最大和

      那么从i|j处转移, j是i的倍数, g[j]+1..g[i]上都放i, 贡献是i*(g[i]-g[j])

      可以发现f[i]就是i的倍数的数目,

      ai 2e7, 但是n只有1e5, 所以与其用调和级数, 不如直接根号分解

      注意存一下因子, 可能他没有在序列中出现过, 但是转移要用

      比如6 8的因子是2

      绝杀D2的时候太紧张把D2交到D1上亏了300多分捏QAQ, 还好D2最后得了300多分补回来了, 但是跟我没写D2有什么区别呢QAQ


    补题: 1/1

    E:

      动态开点线段树板子题

      一开始的序列是$a[i]=i \ 0\leq i\leq 10^9$

      用线段树来维护这个序列

      可以发现每多一天,当天温度为T, 就是对所有值为$[1,T-1]$的数都+1, 对值为$[T+1,10^9]$的数都-1

      可以发现, 如果如果一开始温度x<y, 那么经过多天的变换后肯定有$Tx\leq Ty$

      那么线段树动态开点维护每个点的值就可以了, 维护区间最小最大值, 然后二分找到最右的一个<Ti的点L, 最左的一个>T的点R

      如果找不到, 就不修改, 找得到就修改$[0,L]$ $[R,10^9]$

  • 相关阅读:
    poj 2187 Beauty Contest(旋转卡壳)
    poj 2540 Hotter Colder(极角计算半平面交)
    poj 1279 Art Gallery(利用极角计算半平面交)
    poj 3384 Feng Shui(半平面交的联机算法)
    poj 1151 Atlantis(矩形面积并)
    zoj 1659 Mobile Phone Coverage(矩形面积并)
    uva 10213 How Many Pieces of Land (欧拉公式计算多面体)
    uva 190 Circle Through Three Points(三点求外心)
    zoj 1280 Intersecting Lines(两直线交点)
    poj 1041 John's trip(欧拉回路)
  • 原文地址:https://www.cnblogs.com/gllonkxc/p/15610159.html
Copyright © 2011-2022 走看看