问题描述

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

输出

\[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\)。

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

内存限制: \(256\mathrm{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 \bmod 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 \bmod 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)=
\begin{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)\) 算法

lfyzoj103 割海成路之日的更多相关文章

  1. NOIP 模拟 $28\; \rm 割海成路之日$

    题解 \(by\;zj\varphi\) 用两个集合分别表示 \(1\) 边联通块,\(1,2\) 边联通块 . \(\rm son_x\) 表示当前节点通过 \(3\) 类边能到的 \(2\) 联通 ...

  2. Solution -「LOCAL」割海成路之日

    \(\mathcal{Description}\)   OurOJ.   给定 \(n\) 个点的一棵树,有 \(1,2,3\) 三种边权.一条简单有向路径 \((s,t)\) 合法,当且仅当走过一条 ...

  3. 创成汇丨投脑风暴·创心不止|路演日 第2期,寻IT创业者

    创成汇丨投脑风暴·创心不止|路演日 第2期   无畏荆棘之路的风雨 誓做浪潮之巅的勇者 你说,创业是一场孤注一掷的较量 你说,创新从来都是与过去battle 你还说,坚持总是比开始更让你难以琢磨 所以 ...

  4. BZOJ 1001 狼抓兔子 (最小割转化成最短路)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 27715  Solved: 7134[Submit][ ...

  5. python之路--day8---day9--两日内容

    一.不使用函数的问题 1,代码的组织结构不清晰,可读性差 2,遇到重复的功能只能重复编写实现代码,代码冗余 3,功能需要扩展时,需要找出所有实现该功能的地方修改,无法统一管理且维护难度极大 二.函数是 ...

  6. hdu3035 最小割转换成最短路

    题意:       给你一个平面图,要求从求出从左上角到右下角的最小割. 思路:       如果大意的可能直接上来一遍最大流,然后就会各种悲剧的MLE,TLE,其实这个题目可以用到有个论文里面的那个 ...

  7. BZOJ_1001_狼抓兔子_(平面图求最小割+对偶图求最短路)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1001 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec   ...

  8. Vijos1734 NOI2010 海拔 平面图最小割

    建立平面图的对偶图,把最小割转化成最短路问题 Dijkstra算法堆优化 (被输入顺序搞WA了好几次T_T) #include <cstdio> #include <cstring& ...

  9. Luogu2046 NOI2010 海拔 平面图、最小割、最短路

    传送门 首先一个不知道怎么证的结论:任意点的\(H\)只会是\(0\)或\(1\) 那么可以发现原题的本质就是一个最小割,左上角为\(S\),右下角为\(T\),被割开的两个部分就是\(H=0\)与\ ...

随机推荐

  1. Spark Mllib里如何将数据集按比例随机地分成trainData、testData和validationData数据集(图文详解)

    不多说,直接上干货! 具体详情见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的第11章 电影推荐引擎

  2. 通过Chrome执行watir-webdriver

    1.http://code.google.com/p/chromedriver/downloads/list  下载chromedriver驱动文件chromedriver.exe 2.把驱动文件放在 ...

  3. STL使用迭代器逆向删除

    网上有很多这种例子: void erase(vector<int> &v) { for(vector<int>::reverse_iterator ri=v.rbegi ...

  4. Symbol.iterator 和 for of

    Symbol.iterator 和 for of 是es6的新特性 可以为对象设置 自己的迭代器 首先介绍我们的for of var arr = [1,2,3,8,33] for (var i of ...

  5. POJ 2104 K-th Number (区间第k大)

    题意:给定一个序列A,接下来又m个询问,每个询问输出A[L,R]中的第K大.(保证第k大存在) 思路: 我想拿来练习“可持久化线段树”的,搜到这个比较巧的算法也可以解决这个问题,叫“归并树?.大概的思 ...

  6. UVA 10572 Black & White (状压DP)

    题意:有一个n*m的矩阵,其中部分格子已经涂黑,部分涂白,要求为其他格子也上黑/白色,问有多少种涂法可以满足一下要求: (1)任意2*2的子矩阵不可以同色. (2)所有格子必须上色. (3)只能有两个 ...

  7. COGS 1913. AC自动机

    ★★   输入文件:ACautomata.in   输出文件:ACautomata.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 对,这就是裸的AC自动机. 要求:在 ...

  8. Swift REPL入门介绍

    Xcode 6.1 引入了一个新特性用来辅助Swift开发,即Read Eval Print Loop(“读取-求值-输出”循环,简称REPL).熟悉解释型语言的开发者将会对这个命令行环境感到舒适,而 ...

  9. 分布式锁----浅析redis实现

    引言大概两个月前小伙伴问我有没有基于redis实现过分布式锁,之前看redis的时候知道有一个RedLock算法可以实现分布式锁,我接触的分布式项目要么是github上开源学习的,要么是小伙伴们公司项 ...

  10. 【page-monitor 前端自动化 上篇】初步调研

    转载文章:来源(靠谱崔小拽) 前端自动化测试主要在于:变化快,不稳定,兼容性复杂:故而,想通过较低的成本维护较为通用的自动化case比较困难.本文旨在通过page-monitor获取和分析dom结构, ...