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

    E

    结论1:若(l)(r)最高位不相同,则答案为(11cdots11)

    证明显然

    结论2:若(l)(r)最高位相同,(r)为奇数,答案为(r)

    证明:
    归纳,边界条件为(l=r)(l=r-1),显然答案为(r)
    考虑证明([l,r+2])的答案为(r+2)
    答案由三部分组成:(1)右界为(r+2)(2)右界为(r+1)(3)右界(in [l,r])
    通过归纳,第三部分答案为(r)
    若第一组(lle r+1),由于经过了([r,r+1]),这部分( ext{xor}=1),所以答案最多比第三部分多(1),即(le r+1),故第一部分最大答案为(r+2)
    最后考虑第二部分,假设其答案大于(r+2)
    那么必定存在某位(r+2)中为(0)的,再答案中变成了(1)
    其必定不是个位,因为(r+2)中个位为(1),考虑离(r+1)最近的该位为(1)的数(x)(x)必定为奇数,而(r+1)为偶数,故([x,r+1])这段的长度为偶数,
    容易证明这一位为(1),到前一个这一位为(1)的数间的距离,必定为奇数(相邻均为(1)显然距离为(1),否则考虑跨过一段该位为(0)的段,由于该位不为个位,那么这一段有偶数个数),
    所以一旦该位变成了(1),因为这段区间经过了偶数个数,且这段区间内的数最高位均为(1)(l,r+2)最高位为(1)),所以最高位异或和就变成了(0),所以右界为(r+1)的区间异或和均不会大于(r+2)
    得证。

    结论3:若(l)(r)最高位相同,(r)为偶数,若(lle r-2),则答案为(r+1),否则答案为(r)

    证明:
    根据结论2容易得到答案不会超过(r+1)
    (l=r-1)(r),显然答案为(r);否则取([r-2,r]),容易证明取到上界(r+1)

    F

    可以看到行与列是独立的,单独考虑(n)行的情况。

    首先,我们判断(m)个数是否相等,可以通过(le 3)次询问来达到

    It's enough to check if
    [1,y]=[y+1,2y]
    [1,y]=[y+2,2y+1]
    either x is odd, or [1,x/2]=[x/2+1,x]

    考虑将(n)分解成(prodlimits_{i=1}^m p_i^{k_i}),其计算次数为(sumlimits_{i=1}^m k_i(1+[p_ige 3]+[p_ige 5]))

    具体而言,找到最小的(r(r|n)),满足可以分成(n/r)个高为(r),宽为(m)的相同块
    每次考虑(r)的一个质因子(p),看能否将(r)除掉这个(p),check次数为判断(p)个数是否相等

    显然,(n=2^a3^b5^c)会达到最坏结果:(a+2b+3c)

    可将问题转化为:

    满足(a+blog_2(3)+clog_2(5) leq log_2(N))(a,b,cge 0)
    最大化(a+2b+3c)
    显然(c=log_2(N)/log_2(5))时取最大值,则最坏结果为(3log_2(N)/log_2(5)),约为(1.3log_2(N))

    总查询次数为(le 2.6log_2(N))

  • 相关阅读:
    start tag, end tag issues in IE7, particularly in xslt transformation
    用SandCastle为注释生成chm文档
    Firebug
    架构的重点
    Linux Shell常用技巧(十) 管道组合
    Linux JDK升级
    Linux Shell常用技巧(十二) Shell编程
    Packet Tracer 5.0实验(一) 交换机的基本配置与管理
    Linux Shell常用技巧(六) sort uniq tar split
    Linux Shell常用技巧(二) grep
  • 原文地址:https://www.cnblogs.com/Grice/p/14493829.html
Copyright © 2011-2022 走看看