zoukankan      html  css  js  c++  java
  • lfyzoj103 割海成路之日

    问题描述

    现在,摆在早苗面前的是一道简单题。只要解决了这道简单题,早苗就可以发动她现人神的能力了:

    输出

    [1 mathrm{xor} 2 mathrm{xor} cdots mathrm{xor} n ]

    输入格式

    第一行是一个整数 (T),代表有 (T) 组数据。

    下来 (T) 行,一行一个整数 (n)

    输出格式

    (T) 行,一行一个整数,是你的答案。

    样例一

    input

    2
    3 
    5
    

    output

    0
    1
    

    数据范围与约定

    对于 (30\%) 的数据,(T leq 10)(n leq 100)

    对于 (50\%) 的数据,(T leq 100000)(n leq 100000)

    对于另外 (30\%) 的数据,(T leq 2)(n leq 10^{12}-1)

    对于所有的数据,(1 leq T leq 1145140)(1 leq n leq 10^{18}-1)

    时间限制: (1mathrm{s})

    内存限制: (256mathrm{MB})


    题解

    本文整理自flyinghearts的博客。

    (f(x,y)) 为从 (x) 一路异或到 (y) 的值。(mathrm{xor}) 异或,(mathrm{or}) 是或。

    对于 (f(2^k,2^{k+1}-1))(2^k) 个数,它们的最高位显然是第 (k) 位。最高位的 (1) 的个数为 (2^k)

    (k geq 1) 时, (2^k) 为偶数,(mathrm{xor}) 下来成了 (0)。将这些数的最高位抹去,(f) 的值不变,则 (f(2^k,2^{k+1}-1)=f(2^k-2^k,2^{k+1}-1-2^k)=f(0,2^k-1))

    (f(0,2^{k+1}-1) = f(0,2^k-1) mathrm{xor} f(2^k,2^{k+1}-1)=0)(k geq 1) 时。

    (f(0,2^k-1)=0)(k geq 2) 时。

    对于 (n geq 4),设其最高位 (1) 在第 (k) 位,则 (k geq 2)

    (f(0,n)=f(0,2^k-1) mathrm{xor} f(2^k,n)=f(2^k,n))

    对于 (2^k sim n)(n-2^k+1) 个数,最高位有 (m=n-2^k+1)(1)

    (n)(n-2^k) 同奇偶。

    • (n) 为奇数时

    (m) 是偶数,则 (f(2^k,n)=f(0,n-2^k))

    递降这个公式,也即相当于不断剥去 (n) 最高位的 (1),得到 (f(0,n)=f(0,n mod 4))

    (n equiv 1 pmod 4) 时,(f(1,n)=f(0,n)=f(0,1)=1)

    (n equiv 3 pmod 4) 时,(f(1,n)=f(0,n)=f(0,3)=0)

    • (n) 为偶数时

    (m) 是奇数,则 (f(2^k)=f(n-2^k) mathrm{or} 2^k)

    递降这个公式,得 (f(0,n)=eta mathrm{or} f(0,n mod 4))

    其中 (eta)(n) 将第 (0,1) 位置 (0) 后的数。

    (n equiv 0 pmod 4) 时,(f(1,n)=f(0,n)=n)

    (n equiv 2 pmod 4) 时,(f(1,n)=f(0,n)=n+1)

    综上所述

    [f(1,n)= egin{cases} n, &n equiv 0 pmod 4\ 1, &n equiv 1 pmod 4\ n+1, &n equiv 2 pmod 4\ 0, &n equiv 3 pmod 4\ end{cases} ]

    因此我们得到了 (mathrm{O}(1)) 算法

  • 相关阅读:
    shell进行mysql统计
    java I/O总结
    Hbase源码分析:Hbase UI中Requests Per Second的具体含义
    ASP.NET Session State Overview
    What is an ISAPI Extension?
    innerxml and outerxml
    postman
    FileZilla文件下载的目录
    how to use webpart container in kentico
    Consider using EXISTS instead of IN
  • 原文地址:https://www.cnblogs.com/poorpool/p/8526382.html
Copyright © 2011-2022 走看看