题解 [ARC127C] Binary Strings

news/2025/2/12 4:50:24/文章来源:https://www.cnblogs.com/Chen-Jinhui/p/18706591

【洛谷专栏】。

题意

给出 \(n,x\),请求出二进制下 \([1,2^n-1]\) 中字典序第 \(x\) 小的数是什么。

分析

从样例观察出每一个数的第一个字符都是 \(1\),然后画出 \(n=3\) 的树。

节点即第 \(x\) 小的终止位置,边权从上到下依次表示二进制位。

顺着树从上往下,设当前节点在第 \(i\) 层(\(1\) 为第 \(1\) 层),依次判断:

  • \(x=1\) 时,跳出循环。
  • 如果 \(x > 2^{n-i}\) 时,\(x \gets x-2^{n-i}\),进入右子树并输出 \(1\)
  • 否则 \(x \gets x-1\),进入左子树并输出 \(0\)

std::bitset 模拟即可,具体实现看代码。

代码

//the code is from chenjh
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<bitset>
#define MAXN 1000005
using namespace std;
int n,m;
char s[MAXN];
bitset<MAXN> b;
int main(){scanf("%d ",&n);int c=0;//维护 popcount。scanf("%s",s),m=strlen(s),reverse(s,s+m);//翻转最低位和最高位。for(int i=0;i<n;i++) c+=(b[i]=s[i]?s[i]^'0':0);putchar('1');for(int i=n-1;i>=0;--i){if(c==1&&b[0]) break;//只有 1 个位置为 1 且为第 0 位,即说明 x=1。else if(b[i]&&c>1) b[i]=b[i]^1,--c,putchar('1');//严格大于(不止该位为 1)。else{int x=b._Find_first();//找到最低位为 1 的。for(int i=0;i<x;i++) b[i]=1,++c;//减 1 操作。b[x]=0,--c;putchar('0');}}return 0;
}

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

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

相关文章

[图形绘制/流程图] Mermaid : 开源的低代码图形绘制语言、协议及工具

概述:MermaidMermaid‌是一种基于Javascript的、开源的文本驱动图表生成工具/绘图工具,,使用类似于Markdown的低代码语法,它允许用户使用简单的文本语言来创建各种类型的图表,如流程图、时序图、甘特图和饼状图等。https://github.com/mermaid-js/mermaid https://mermaid…

SFM(Structure from Motion)总结(一)

什么是SFM? SFM(Structure from Motion)即运动结构恢复,通过给出多幅图像及其图像特征的一个稀疏对应集合,从而估计3D点的位置,这个求解过程通常涉及3D几何(结构)和摄像机姿态(运动)的同时估计。如何求解相关参数? 从图中可以得出,我们需要求解的主要内容有两个,一…

virt-manager 创建 Linux 虚拟机

上传 iso 到宿主机 ls -l /data1/iso/ total 4422912 -rw-r--r-- 1 root root 1774077952 Jan 22 08:51 ctyunos-2.0.1-210625-x86_64-dvd.iso -rw-r--r-- 1 root root 2754981888 May 7 2024 ubuntu-24.04-live-server-amd64.iso 运行 virt-manager virt-manager创建虚拟机 …

hyperf: 为项目定义全局函数

一,修改composer.json"autoload": {"psr-4": {"App\\": "app/"},"files": ["app/Functions.php"]}, 在files数组中增加我们的函数文件 二,源代码 app/Functions.php <?phpuse Hyperf\Context\ApplicationCo…

13. CMake工具的使用

一、什么是CMake工具CMake 是一个跨平台的构建系统生成器,主要用于管理和自动化软件项目的构建过程。它通过读取项目中的 CMakeLists.txt 文件来生成适用于不同编译器和操作系统的构建文件。对于大型或复杂的项目,直接编写和维护 Makefile 文件可能会变得非常复杂且容易出错,…

「PMOI-5」奇怪的方程 题解

哎哎,感觉是很典的题啊,但还是不会。 一些无脑的转化 首先转化成二维数组,原题中 \(2n\) 个方程相当于必须满足每一行和每一列的数之和是定值,已被选的数可以让这个位置的行与列的总和分别减去这个数,然后直接令它等于 \(0\),显然这是与原条件等价的。 另外我们可以发现有…

P11216 【MX-J8-T4】2048 题解

这是本蒟蒻的第一篇正式题解。 本题重点在于找到无解序列的充要条件,首先记 \(a_i\) 为游戏结束时第 \(i\) 个数取 \(2\) 的对数,\(t_i\) 为第 \(i\) 个数出现时间离散化后的值,显然 \(a\) 相邻两项不同,\(t\) 是一个排列,如果一个位置比它相邻位置大且出现时间小,直接按…

问一下,利用在线 DeepSeek 等 API 服务实现一个答题 APP

这是一个利用 Android 无障碍功能 + 悬浮窗 + 大模型的搜题应用原理就是利用无障碍读取屏幕内容,然后通过悬浮窗来显示答案简介 这是一个利用 Android 无障碍功能 + 悬浮窗 + 大模型的搜题应用 原理就是利用无障碍读取屏幕内容,然后通过悬浮窗来显示答案 众所周知我是一个学渣…

Window逆向之x86 ShellCode入门

免责声明: 由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!前言 不少人对于ShellCode的认知是很浅的,只知道它是一…

【字符串、栈】string转double

stod函数 将string转为double string t = s.substr(i, j - i); double num = stod(t);例题:货币单位换算样例1 输入 2 20CNY53fen 53HKD87cents输出 6432说明: 20元53分+53港元87港分,换算成人民币分后汇总,为6432 样例2 输入 1 100CNY输出 10000说明: 100CNY转换后是1000…

ceph 16.2.15(Pacific)编译

目录获取ceph源码编译拉取submodule网络问题安装依赖do_cmake.sh编译vstart启动问题编译dashboard安装nodejs方法一 下载编译好的源码包方法二 nvm安装node(推荐)编译nodeenv其他boost下载慢总结以下流程在ubuntu22.04 和 openEuler20.03 都实际操作过获取ceph源码 从https:/…