【CF1338C】Perfect Triples【位运算】【构造】
传送门
题意:有一序列SSS由下列方式生成:
- 找到字典序最小的正整数(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⊕为异或
- 将a,b,ca,b,ca,b,c加入SSS
- 重复第一步
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(Tlogn)O(T\log n)O(Tlogn)
【CF1338C】Perfect Triples【位运算】【构造】相关推荐
- c++ 位运算_C语言之运算符
运算符代表的是各种各样的运算(操作) 已知的运算符:+ - * / =(赋值) 1.运算符的分类 运算符的分类方法很多,通常用功能或者操作数个数进行分类 功能:算数运算符 逻辑运算符 位运算符 地址运 ...
- CodeForces - 1451E2 Bitwise Queries (Hard Version)(交互+构造+位运算)
题目链接:点击查看 题目大意:给出一个长度为 n(n 保证了是 2 的幂次),每个数的范围在 [ 0 , n - 1 ] 的一个数组,现在要求通过有限次操作确定下来这个数组: 询问 a[ i ] xo ...
- C语言用位运算构建特定的二进制数
用位运算构建特定的二进制数 寄存器操作需要给特定位给特定值 使用移位获取特定位为1的二进制数 结合位取反获取特定位为0的二进制数 寄存器操作需要给特定位给特定值 (1)对寄存器特定位进行置1或者清0或 ...
- c语言结构体的位操作,C语言之路---结构体、位运算及预处理命令
一.结构体 1).概念 结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member). 结构体也是一种数据类型,它由程序员自己定 ...
- CH - 0104 起床困难综合症(位运算+贪心)
题目链接:点击查看 题目大意:我们需要构造一个初始值start,范围在[0,m],要求使用这个初始值进行k次操作后得到的答案最大,每次操作分为三个类型: AND x:让当前答案与x进行按位与 OR x ...
- 《嵌入式Linux与物联网软件开发——C语言内核深度解析》一2.4 位运算构建特定二进制数...
本节书摘来自异步社区<嵌入式Linux与物联网软件开发--C语言内核深度解析>一书中的第2章,第2.4节,作者朱有鹏 , 张先凤,更多章节内容可以访问云栖社区"异步社区" ...
- Dreamoon Likes Sequences CodeForces - 1330D(组合数学+位运算)
Dreamoon likes sequences very much. So he created a problem about the sequence that you can't find i ...
- 【Python位运算】——左移操作(<<)右移操作>>
目录 左移操作 右移操作 其他博主的理解 应用--力扣题目78. 子集 解法 深度优先搜索 位运算 参考文献 左移操作 # 左移操作,左移一位相当于乘以b,a<<b,a' = a*(2^b ...
- 位运算-查找数组中唯一成对的数
基础实例一:使用位运算判断数的奇偶性 实例代码: public class Test {public static void main(String[] args) {System.out.print ...
- LeetCode 2032. 至少在两个数组中出现的值(哈希/位运算)
文章目录 1. 题目 2. 解题 2.1 哈希查找 2.2 位运算 1. 题目 给你三个整数数组 nums1.nums2 和 nums3 ,请你构造并返回一个 不同 数组,且由 至少 在 两个 数组中 ...
最新文章
- RNA-seq需要多长的读长?
- 判断TREE的某个节点是否是叶节点.
- 【Android游戏开发之十】(优化处理)详细剖析Android Traceview 效率检视工具
- JingRiverOS的自由软件之路
- CTFshow 反序列化 web271
- Algorithm之PGM之BNet:贝叶斯网络BNet的相关论文、过程原理、关键步骤等相关配图
- Jenkins系统上的时间不正确问题
- 数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器(转)...
- 【待解答】文件目录可以利用foreach边遍历边删除操作,为什么?
- DFS-20190206
- 【华为敏捷/DevOps实践】5. 如何避免DevOps变革的六大“焦油坑”
- java中什么是抽象类(abstract)
- HTML5标签canvas制作动画
- 病毒周报(081208至081214)
- win10下如何关闭445端口,教程演示
- 出现窗口:CMD提示应用程序错误
- 為Raspberry Pi 安裝Raspbian系統的詳細步驟 (Mac OS版本)
- 在索智SC3807VS EVB上调试开发以太网功能(使用V3s的内部EMAC+PHY)
- VS2008宏无法运行的问题
- MIMIC-III数据库申请流程
热门文章
- Oracle DBA
- 历史上最怪异的23种飞行器,设计者脑子里都想什么了
- SparkSQL DataFrame进阶篇
- 数据库 流量切分_互联网大厂有哪些分库分表的思路和技巧?
- webgl坐标转换_OpenGL/WebGL顶点坐标变换过程简介
- java1.8 lambda表达式_java1.8之Lambda表达式
- mybatis mysql usegeneratedkeys_mybatis中useGeneratedKeys用法--插入数据库后获取主键值
- python递归函数查询表_python---------------递归函数
- python面向对象编程思想书籍_Python的面向对象编程思想
- 问题 B: 十进制到二进制的转换