题意

爱莉给了你一个非负整数 nnn,你需要把 0,1,2,…,n0, 1, 2, \dots, n0,1,2,,n 划分成若干组,满足每一组的按位与为 000

划分的组不需要相邻。

你需要最大化划分组数并给出方案。

1≤T≤6001 \le T \le 6001T6000≤n≤1050 \le n \le 10^50n105,保证单个测试点内 nnn 的和不超过 2×1052 \times 10^52×105

思路

闲着没事去看了两眼,题目越简洁,看着越吓人,做法越要思考。实在没想到这个只有黄的 T3,不过挺好玩的。

打表样例可见,每一组似乎都不超过 2 个。不妨就构造两个两个一组的答案,可能会多出一个 000,理论上可以得到 ⌈n+12⌉\left \lceil \dfrac{n+1}{2} \right \rceil2n+1 组。

考虑怎么样得到两个数与起来为 000,需要二进制每一位要么相反要么均为 000

假若有一个数 2x=(100...000)22^x=(100...000)_22x=(100...000)2,其中 000xxx 个,另一个数 2x−1=(11...111)22^x-1=(11...111)_22x1=(11...111)2,其中 111 也有 xxx 个;这二者与起来为 000,而若前者一直 +1+1+1,后者一直 −1-11,两个数按位与起来总是为 000。为什么呢?每次 +1+1+1 或者 −1-11,要么只改变末尾,要么发生进位改变高位——进位可能改变连续的高位。但是各位在初始状态总是相反,所以两个数同时改变各位依旧相反。

那么可以这样构造:找到小于 nnn 的最大 2x2^x2x,将 n∼2xn\sim 2^xn2x 加进队列,然后从 2x2^x2x2x−12^x-12x1 依次向大和向小枚举配对;设后者配对到 pospospos,当前者配对到 nnn 就停下,然后向队列中增补 2x−1∼pos−12^{x-1}\sim pos-12x1pos1,下一轮继续遍历到 pos−1pos-1pos1 ……——如果还没配对到 nnnpospospos 就到了 2x−12^{x-1}2x1 怎么办?此时 2x−1>pos−12^{x-1}>pos-12x1>pos1,可以直接忽略进队列的操作,继续把队列里剩下的元素配对玩再说,根据上面的结论来看这时可行的。

最后看队列有没有剩下的,如果 nnn 为奇数队列中将会剩下一个,此时让其和 000 配对;否则 000 自成一组。

讲得有点口胡了。具体细节见代码。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll T,n;
ll p2[22];
void init()
{p2[0]=1;for(int i=1;i<=20;i++)p2[i]=p2[i-1]*2;
}
queue<ll>q;
void clean()
{while(!q.empty())q.pop();
}
int main()
{scanf("%lld",&T);init();while(T--){clean();scanf("%lld",&n);if(n==0){puts("1");puts("1 0");continue;}printf("%lld\n",(n+2)/2);ll x=upper_bound(p2+1,p2+21,n)-p2-1;for(int i=p2[x];i<=n;i++)q.push(i);for(int i=x-1;i>=0;i--){ll pos=p2[i+1]-1;while(!q.empty()&&pos>=p2[i]){printf("2 %lld %lld\n",pos,q.front());pos--;q.pop();}for(int j=p2[i];j<=pos;j++)q.push(j);}if(!q.empty())printf("2 0 %lld\n",q.front());else puts("1 0");}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93981.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93981.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/93981.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录一次ESP32报错Guru Meditation Error: Core 1 panic‘ed (Double exception).

一、问题描述 需求&#xff1a; ESP32S3单片机&#xff0c;连接一个麦克风读取5s后&#xff0c;编码后发送到百度云进行语音识别。通过freertos框架&#xff0c;将任务放在核1中运行&#xff08;放在核0同样报错&#xff09; 问题&#xff1a; 在最后的发送语音数据中&#xff…

半导体物理复习

半导体物理导论第一章 半导体的电子状态

vi/vim跳转到指定行命令

在 vi/vim 中跳转到指定行有多种高效方法&#xff0c;以下是最常用的操作方式&#xff1a; 一、基础跳转&#xff1a;行号 命令命令模式下直接输入行号 按 Esc 切换到命令模式后&#xff0c;输入 :行号 并回车。例如&#xff0c;输入 :100 会直接跳转到第 100 行。使用 G 快捷…

智能落地扇方案:青稞RISC-V电机 MCU一览

在科技飞速发展的今天&#xff0c;智能家居已成为人们生活中不可或缺的一部分&#xff0c;而风扇作为夏日解暑的必备家电&#xff0c;其智能化升级也成为了行业发展的必然趋势。传统落地扇功能单一、操作不便&#xff0c;已难以满足现代消费者对便捷、舒适、节能生活的追求。在…

SQL 中 WHERE 与 HAVING 的用法详解:分组聚合场景下的混用指南

SQL中WHERE与HAVING的用法详解&#xff1a;分组聚合场景下的混用指南 1. WHERE与HAVING的基本区别 在SQL查询中&#xff0c;WHERE和HAVING都是用于过滤数据的子句&#xff0c;但它们的应用时机和作用对象有本质区别&#xff1a; WHERE子句&#xff1a;在分组前对原始数据进行过…

14 - 大语言模型 — 抽取式问答系统 “成长记”:靠 BERT 学本事,从文本里精准 “揪” 答案的全过程(呆瓜版-1号)

目录 1、什么是问答系统&#xff1f; 2、问答系统的核心工作流程 2.1、理解问题&#xff1a;把问题 “翻译” 成机器能懂的形式 2.2、 寻找答案&#xff1a;从信息中定位答案 2.3、生成答案&#xff1a;整理并输出结果 2.4、优化迭代&#xff1a;让系统更 “聪明” 3、主…

Docker一键部署轻量级Gitea仓库

1、安装docker 1、安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm22、配置docker yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3、安装docker yum install -y docker-ce4、修改docker配置文…

2025年渗透测试面试题总结-2025年HW(护网面试) 81(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年HW(护网面试) 81 一、Webshell获取路径规划 二、变形注入突破技巧 三、MySQL写入Webshell条件矩阵 …

8.1IO进程线程——文件IO函数

文章目录一、思维导图二、使用文件IO函数&#xff0c;实现文件的拷贝myhead.h代码现象三、使用标准IO函数&#xff0c;实现图片的拷贝代码现象四、使用文件IO函数&#xff0c;计算文件的大小代码现象五、牛客网刷题一、思维导图 二、使用文件IO函数&#xff0c;实现文件的拷贝 …

xerces-c-src_2_8_0 arm_linux编译

xerces-c-src_2_8_0 ARM LINUX 编译 文章借鉴&#xff1a;https://bbs.csdn.net/topics/250017321 export XERCESCROOT/xxxx/xerces-c-src_2_8_0 1 下载地址https://archive.apache.org/dist/xerces/c/sources/xerces-c-src_2_8_0.tar.gz&#xff1a;xerces-c-src_2_8_0.tar…

20250729使用WPS打开xlsx格式的电子表格时候隐藏显示fx的编辑栏的方法

20250729使用WPS打开xlsx格式的电子表格时候隐藏显示fx的编辑栏的方法 2025/7/29 9:44缘起&#xff1a;视图→编辑栏 截屏的时候&#xff0c;显示fx的编辑栏 占用空间了&#xff0c;很讨厌。 想办法拿掉&#xff01;

springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别

在Spring Boot中&#xff0c;ConfigurationProperties注解用于将外部配置文件&#xff08;如application.properties或application.yml&#xff09;中的属性映射到Java对象中。这种方式使得配置管理更加灵活和集中。而将配置信息存入数据库则是另一种管理应用程序配置的方式。这…

JVM指针压缩的那些事

什么是指针压缩&#xff1f;指针压缩&#xff08;Compressed Ordinary Object Pointers&#xff0c;简称Compressed OOPs&#xff09;是JVM在64位平台上的一种内存优化技术&#xff0c;它将64位的对象引用压缩为32位&#xff0c;从而减少内存占用并提升性能。为什么需要指针压缩…

【数据结构初阶】--排序(一):直接插入排序,希尔排序

&#x1f525;个人主页&#xff1a;草莓熊Lotso &#x1f3ac;作者简介&#xff1a;C研发方向学习者 &#x1f4d6;个人专栏&#xff1a; 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言&#xff1a;生活是默默的坚持&#xff0c;毅力是永久的…

Hive SQL (HQL) 编辑指南

Hive SQL&#xff08;HQL&#xff09;是基于Hive的数据仓库查询语言&#xff0c;语法类似标准SQL&#xff0c;但因Hive的离线大数据处理特性&#xff0c;存在一些特有规则和最佳实践。以下是Hive SQL的编辑指南&#xff0c;涵盖核心语法、注意事项和优化技巧&#xff1a; 一、H…

力扣热题100--------240.搜索二维矩阵

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1&#xff1a;输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24…

【pytest高阶】-2- 内置hook插件扩展机制和定制开发

一、可爱版 pytest 插件 & hook 知识大礼包 &#x1f381;准备好和 pytest 插件来一场可爱约会了吗&#xff5e; 咱们用超甜的 emoji 把知识串成棉花糖&#x1f361; 一口一个知识点&#xff01;一、 pytest 插件&#xff1a;框架的 “魔法百宝箱” &#x1f9d9;‍♀️1. …

博创软件数智通OA平台:高效协同,安全办公新选择

在数字化转型浪潮下&#xff0c;企业对于办公自动化系统的需求日益迫切。博创软件&#xff0c;作为协同办公领域的佼佼者&#xff0c;凭借其卓越的技术实力和丰富的行业经验&#xff0c;推出了数智通OA平台&#xff0c;为企业提供了一个高效、安全、便捷的办公解决方案。博创软…

AI coding汇总持续更新

代码编辑器 当然了&#xff0c;用代码编辑器这个概念太泛了&#xff0c;更多的是指AI代码编辑器&#xff0c;有自动补全&#xff0c;ai写代码功能的产品。 cursor WindSurf Trae jetbrains全家桶 比如&#xff1a;IntelliJ IDEA虽然很优秀&#xff0c;但是有种感觉&#xff0c;…

Yolo底层原理学习--(第二篇)

一&#xff0c;IOU置信度与非极大值抑制NMS在第一篇文章中我们讲到&#xff0c;对于一张图片&#xff0c;在前向传播的过程后&#xff08;也就是卷积&#xff0c;池化&#xff0c;全连接等等&#xff09;&#xff0c;会生成许许多多个预测框&#xff0c;那么怎么从这么多预测框…