传送门

题意:有一序列SSS由下列方式生成:

  1. 找到字典序最小的正整数(a,b,c)(a,b,c)(a,b,c),满足a,b,ca,b,ca,b,c不在SSS中且a⊕b⊕c=0a\oplus b\oplus c=0a⊕b⊕c=0,其中⊕\oplus⊕为异或
  2. 将a,b,ca,b,ca,b,c加入SSS
  3. 重复第一步

TTT组数据,求SSS的第nnn项。

T≤105,n≤1016T\leq 10^5,n\leq10^{16}T≤105,n≤1016

通过观察样例和理性猜想,可以假设前4k−14^k-14k−1项恰好填完了1∼4k−11\sim4^k-11∼4k−1,显然这是整数个三元组。采用归纳法构造4k∼4k+1−14^k\sim 4^{k+1}-14k∼4k+1−1

将每个序列中的数按二进制位两个为一组拆分(以下称拆成的两个二进制位为"位"),当前的数(已构造的和此步将构造的)有2(k+1)2(k+1)2(k+1)位

之前填的4k−14^k-14k−1项可以看成最高位为00\texttt{00}00,我们要构造的是最高位为01,10,11\texttt{01,10,11}01,10,11,后面kkk位分别遍历0∼4k−10\sim 4^k-10∼4k−1

对于每一个(a,b,c)(a,b,c)(a,b,c)显然有a<b<ca<b<ca<b<c

构造aaa最高位为01\texttt{01}01,容易得到b,cb,cb,c最高位为10,11\texttt{10,11}10,11。这是最理想的结果,下面将证明这种构造是可行的。

现在已经满足了a<b<ca<b<ca<b<c,那么a,b,ca,b,ca,b,c的后kkk位是互不影响的。下面讨论的都是这后kkk位。

现在考虑如何最小化字典序

对于一个已经确定的aaa,我们都需要找到最小的bbb(废话)

对于aaa上的每一位,都找到一个最小的对应的bbb的位即可(似乎还是废话,但似乎就是想不到)

设新构造的三元组为(ai,bi,ci)(0≤i≤2k−1)(a_i,b_i,c_i)(0\leq i\leq2^k-1)(ai​,bi​,ci​)(0≤i≤2k−1)显然所有的ai=ia_i=iai​=i

根据以上信息可以构造出(a,b,c)(a,b,c)(a,b,c)每一位字典序最小的对照表

盗用官方题解的图:


随便推一下就可以了

复杂度O(Tlog⁡n)O(T\log n)O(Tlogn)

【CF1338C】Perfect Triples【位运算】【构造】相关推荐

  1. c++ 位运算_C语言之运算符

    运算符代表的是各种各样的运算(操作) 已知的运算符:+ - * / =(赋值) 1.运算符的分类 运算符的分类方法很多,通常用功能或者操作数个数进行分类 功能:算数运算符 逻辑运算符 位运算符 地址运 ...

  2. CodeForces - 1451E2 Bitwise Queries (Hard Version)(交互+构造+位运算)

    题目链接:点击查看 题目大意:给出一个长度为 n(n 保证了是 2 的幂次),每个数的范围在 [ 0 , n - 1 ] 的一个数组,现在要求通过有限次操作确定下来这个数组: 询问 a[ i ] xo ...

  3. C语言用位运算构建特定的二进制数

    用位运算构建特定的二进制数 寄存器操作需要给特定位给特定值 使用移位获取特定位为1的二进制数 结合位取反获取特定位为0的二进制数 寄存器操作需要给特定位给特定值 (1)对寄存器特定位进行置1或者清0或 ...

  4. c语言结构体的位操作,C语言之路---结构体、位运算及预处理命令

    一.结构体 1).概念 结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member). 结构体也是一种数据类型,它由程序员自己定 ...

  5. CH - 0104 起床困难综合症(位运算+贪心)

    题目链接:点击查看 题目大意:我们需要构造一个初始值start,范围在[0,m],要求使用这个初始值进行k次操作后得到的答案最大,每次操作分为三个类型: AND x:让当前答案与x进行按位与 OR x ...

  6. 《嵌入式Linux与物联网软件开发——C语言内核深度解析》一2.4 位运算构建特定二进制数...

    本节书摘来自异步社区<嵌入式Linux与物联网软件开发--C语言内核深度解析>一书中的第2章,第2.4节,作者朱有鹏 , 张先凤,更多章节内容可以访问云栖社区"异步社区" ...

  7. Dreamoon Likes Sequences CodeForces - 1330D(组合数学+位运算)

    Dreamoon likes sequences very much. So he created a problem about the sequence that you can't find i ...

  8. 【Python位运算】——左移操作(<<)右移操作>>

    目录 左移操作 右移操作 其他博主的理解 应用--力扣题目78. 子集 解法 深度优先搜索 位运算 参考文献 左移操作 # 左移操作,左移一位相当于乘以b,a<<b,a' = a*(2^b ...

  9. 位运算-查找数组中唯一成对的数

    基础实例一:使用位运算判断数的奇偶性 实例代码: public class Test {public static void main(String[] args) {System.out.print ...

  10. LeetCode 2032. 至少在两个数组中出现的值(哈希/位运算)

    文章目录 1. 题目 2. 解题 2.1 哈希查找 2.2 位运算 1. 题目 给你三个整数数组 nums1.nums2 和 nums3 ,请你构造并返回一个 不同 数组,且由 至少 在 两个 数组中 ...

最新文章

  1. RNA-seq需要多长的读长?
  2. 判断TREE的某个节点是否是叶节点.
  3. 【Android游戏开发之十】(优化处理)详细剖析Android Traceview 效率检视工具
  4. JingRiverOS的自由软件之路
  5. CTFshow 反序列化 web271
  6. Algorithm之PGM之BNet:贝叶斯网络BNet的相关论文、过程原理、关键步骤等相关配图
  7. Jenkins系统上的时间不正确问题
  8. 数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器(转)...
  9. 【待解答】文件目录可以利用foreach边遍历边删除操作,为什么?
  10. DFS-20190206
  11. 【华为敏捷/DevOps实践】5. 如何避免DevOps变革的六大“焦油坑”
  12. java中什么是抽象类(abstract)
  13. HTML5标签canvas制作动画
  14. 病毒周报(081208至081214)
  15. win10下如何关闭445端口,教程演示
  16. 出现窗口:CMD提示应用程序错误
  17. 為Raspberry Pi 安裝Raspbian系統的詳細步驟 (Mac OS版本)
  18. 在索智SC3807VS EVB上调试开发以太网功能(使用V3s的内部EMAC+PHY)
  19. VS2008宏无法运行的问题
  20. MIMIC-III数据库申请流程

热门文章

  1. Oracle DBA
  2. 历史上最怪异的23种飞行器,设计者脑子里都想什么了
  3. SparkSQL DataFrame进阶篇
  4. 数据库 流量切分_互联网大厂有哪些分库分表的思路和技巧?
  5. webgl坐标转换_OpenGL/WebGL顶点坐标变换过程简介
  6. java1.8 lambda表达式_java1.8之Lambda表达式
  7. mybatis mysql usegeneratedkeys_mybatis中useGeneratedKeys用法--插入数据库后获取主键值
  8. python递归函数查询表_python---------------递归函数
  9. python面向对象编程思想书籍_Python的面向对象编程思想
  10. 问题 B: 十进制到二进制的转换