CSP-S 真题:格雷码

 原文链接:CSP-S 真题第二讲:格雷码

说明:CSDN和公众号文章同步发布,需要第一时间收到最新内容,请关注公众号【比特正传】。

一、题目背景

题目来源:CSP-S 2019年 T1

题目考察点:递归、搜索

题目链接:https://www.luogu.com.cn/problem/P5657

二、题目分析

首先,仔细阅读题目,并结合3个样例来深刻理解题意。

思考一下,对于有n位二进制的格雷码,最高位(约定输出结果的左边为高位,右边为低位)应该输出0还是1呢?我们把n位二进制的格雷码一分为二,左半部分有2^{n-1}个格雷码,右半部分有2^{n-1}个格雷码,可以发现一个规律,左半部分的格雷码的最高位都是0,右半部分的格雷码的最高位都是1,因此当前第n位是0还是1取决于当前的k,如果k在左半部分,那么应该输出0,k在右半部分应该输出1。

根据上面的思路,我们输出完第n位后呢?剩下了n-1位二进制,对于第n-1位呢?是不是又和上面的思路一模一样,因此我们考虑使用递归。

如果将当前n个二进制分为左和右两部分,左边2^{n-1}个格雷码,右边​​​​​​​2^{n-1}个格雷码,那么当​​​​​​​k< 2^{n-1}时(k从0开始,所以是小于而不是小于等于),此时输出0,在左半部分继续找第k个,因此递归dfs(n-1, k),如果k\geqslant 2^{n-1},那么一定在右边,因此先输出1,然后继续递归,此时需要注意了,本来在n位二进制中,是第k个元素,但是现在只能递归右半部分,因此在右半部分中,是第​​​​​​​k- 2^{n-1}个,还有一点需要注意,在右半部分中,基于n-1位二进制的元素,是倒着遍历,所以对于n-1的二进制,顺着应该是第​​​​​​​2^{n-1} - (k- 2^{n-1})-1, 因为右边总共就2^{n-1}个,是逆序的第k-2^{n-1}个,那么就是正序的第​​​​​​​2^{n-1} - (k- 2^{n-1})-1个(不好理解的话,在本子上画一画),因此输出1后,递归dfs(n-1, ​​​​​​​2^{n-1} - (k- 2^{n-1})-1)。

有了以上的思路,代码就好些了,code如下:

三、AC code

#include "bits/stdc++.h"
using namespace std;
#define ull unsigned long long
ull n, k;
// n表示二进制位数,k表示第k个格雷码
void dfs(ull n, ull k) {if(n<1) return;  // 递归结束条件ull res = 1;  // 一定要是ull类型的1,否则默认为int的1,会越界res = res << n-1; // 等价于2^(n-1)if(res > k) { // 在左半部分,因此k从0开始,所以是小于而不是小于等于cout << 0;  // 先输出0dfs(n-1, k);  // 递归} else {cout << 1;  // 在右半部分,输出1dfs(n-1, res - (k-res) -1);  // 递归,推导见上面的分析}
}int main() {cin >> n >> k;dfs(n, k);return 0;
}

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

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

相关文章

C语言:实现使用malloc函数模拟开辟一个二维数组

目录 解题思路 步骤一&#xff1a;开辟空间 步骤二&#xff1a;使用空间 步骤三&#xff1a;释放空间 图解 完整代码展示&#xff1a;注意看注释 在C语言编程中&#xff0c;处理多维数据结构时&#xff0c;我们通常会遇到二维数组。然而&#xff0c;对于特定大小或需要动…

Java秘笈

一、缩略 二、详版 【CDN分发】||----【跳板机】---SSH&#xff1a;(^_^) 管理员/运维Iptables【防火墙】要求&#xff1a;HA||----【等保系统】||----【蜜罐系统】【反向代理】Nginx/Lvs【静态服务器】【边际路由】要求&#xff1a;HA||Gateway/Zull【Api网关】要求&#xff1…

JS精度计算的几种解决方法,1、转换成整数计算后再转换成小数,2、toFixed,3、math.js,4、bignumber.js,5、big.js

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、转换成整数计算后再转换成小数二、toFixed三、math.js四、bignumber.js五、big.js总结 前言 原始计算 let aNum 6.6 0.3;let bNum 6.6 - 0.2;let cNum 6.6 * 0.3;let dNum 6.6 / 0.2;console.log(…

Linux之基础IO

1.C语言中的文件操作函数 文件的打开 path为文件路径&#xff0c;mode为打开方式&#xff0c;它们都是字符串。 代码演示&#xff1a; 此时&#xff0c;当前目录中并没有log.txt文件&#xff0c;但是没关系&#xff0c;fopen会在当前路径下创建log.txt文件。 简单来说&#xf…

分享 | 使用Virtuoso VCPVSR工具基于标准单元的布局布线流程

​ 本节内容 导览 一、准备工作 二、运行VCP前的配置 三、VCP的布局规划 四、VCP的自动摆放 五、VSR的自动绕线 分享使用Virtuoso GXL Custom Digital Placer(VCP) & Space-based Router(VSR)工具进行基于纯数字Standard-Cell布局布线的操作流程。 VCP&VSR演…

【MySQL】2.MySQL数据库的基本操作

目录 数据库基本操作 查看数据库信息 查看数据库结构 显示数据表的结构&#xff08;字段&#xff09; 常用的数据类型 数据库管理操作 SQL语句概述 SQL分类 1.DDL&#xff1a;数据定义语言 1.1创建数据库和表 创建数据库 创建数据表 1.2删除数据库和表 删除数据表…

【数字图像处理matlab系列】使用数组索引进行简单的图像裁剪、二次取样操作

【数字图像处理matlab系列】使用数组索引进行简单的图像裁剪、二次取样操作 【先赞后看养成习惯】求点赞+关注+收藏! pout.tif是一张matlab自带的图片,图像尺寸是291*240,使用imread读取该图像>> a = imread(pout.tif); >> imshow(a);对图像a进行上下翻转操作,…

国务院办公厅发布:政府类网站网页设计规范(试行)

国务院办公厅于2019年12月发布了《政府类网站网页设计规范&#xff08;试行&#xff09;》。该规范的发布旨在统一政府类网站的设计风格和标准&#xff0c;提升政府网站的用户体验和可访问性&#xff0c;推动政府信息公开和服务的提升。 该规范涵盖了政府类网站的各个方面&…

【代码学习】Mediapipe人脸检测使用记录

Mediapipe&#xff0c;每秒200-300帧的实时人脸检测&#xff0c;提取画面中的人脸框&#xff0c;实现后续各种应用&#xff1a;人脸属性识别、表情识别、关键点检测、三维重建、增强现实、AI换妆等 code&#xff1a;google/mediapipe: Cross-platform, customizable ML soluti…

Java异常类型及异常处理方式

本章学习内容&#xff1a;使用异常处理机制&#xff0c;对程序运行过程中出现的异常情况进行捕捉并处理. 目录 &#x1f4cc; Java异常概述 &#x1f4cc; Java异常体系结构 &#x1f4cc; 常见的异常 &#x1f4cc; 异常处理 &#x1f4cc; Java异常概述 ○ 异常的概念&…

数据库管理-第163期 19c重建ADG的两个方法(20240323

数据库管理163期 2024-03-23 数据库管理-第163期 19c重建ADG的两个方法&#xff08;20240323&#xff09;1 ORA-081032 新办法1 关闭MRP2 恢复备库3 其他操作4 启动备库5 启动MRP 3 老办法4 预告总结 数据库管理-第163期 19c重建ADG的两个方法&#xff08;20240323&#xff09;…

vscode配置c/c++调试环境

本文记录win平台使用vscode远程连接ubuntu server服务器下&#xff0c;如何配置c/c调试环境。 过程 1. 服务器配置编译环境 这里的前置条件是vscode已经能够连接到服务器&#xff0c;第一步安装编译构建套件&#xff08;gcc、g、make、链接器等&#xff09;和调试器&#xf…

vue3之生命周期

Vue3之生命周期 主要Vue生命周期事件被分为两个钩子&#xff0c;分别在事件之前和之后调用&#xff0c;vue应用程序中有4个主要事件(8个钩子)&#xff1a; 创建 ---- 在组建创建时执行挂载 ---- DOM被挂载时执行更新 ---- 当响应数据被修改时执行销毁 ---- 在元素被销毁之前立…

深度学习模型部署(十一)TensorRT写Plugin

什么是plugin & 有什么用&#xff1f; TensorRT的一种机制&#xff0c;以.so的形式插入到网络中实现某些算子。 作用&#xff1a; 实现TensorRT不支持的层替换性能不好的层手动进行图优化算子融合 写Plugin就是自己写算子的CUDA kernel实现。 Plugin与其他layer之间无法…

【数据结构】顺序表和链表详解顺序表和链表的实现

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;数据结构_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.线性表 1.1 顺序表 1.1.1 概念及结构 1.1.2 静态顺序表 1.1.3 动态顺序表 1.2 链表 1.2.1 链表的概念及结构 1.2.2 链表…

馆室一体化查档平台制度有哪些

馆室一体化查档平台制度是指图书馆或档案馆在数字化和信息化的背景下&#xff0c;建立起的集查阅、借阅、咨询、文献传递等多项功能于一体的平台制度。下面是一些常见的馆室一体化查档平台制度&#xff1a; 1. 馆藏管理制度&#xff1a;包括图书和档案的采购、编目、分类、整理…

详解rtklib中main函数如何配置文件(下)

目录 一、main函数流程总结 二、分析识别 -k 后如何配置 三、最后传参的数据文件处理方式 一、main函数流程总结 详解rtklib中main函数如何配置文件&#xff08;上&#xff09;-CSDN博客 在这片文章中讲解了rtklib中main函数的整个流程。 &#xff08;1&#xff09;通过…

保研复习概率论2

1.什么是随机变量的数学期望&#xff08;expected value&#xff09;&#xff1f; 如果X是离散型随机变量&#xff0c;其分布列为piP{Xxi}(i1,2...)&#xff0c;若级数绝对收敛&#xff0c;则称随机变量X的数学期望存在&#xff0c;并将的和称为随机变量X的数学期望&#xff0…

【Frida】【Android】01_手把手教你环境搭建

▒ 目录 ▒ &#x1f6eb; 导读开发环境 1️⃣ 环境搭建安装Android模拟器安装Frida CLI安装Frida Server端口重定向&#xff1a;adb forward 2️⃣ 运行测试spwan模式attach模式直接加载脚本 &#x1f4d6; 参考资料 &#x1f6eb; 导读 开发环境 版本号描述文章日期2024-03…

matlab空间曲线图形

说明&#xff1a;问题来自CSDN-问答板块&#xff0c;题主提问。 需求&#xff1a;如何用子图命令画出平面y2z&#xff0c;z2y与球面x^2y^2z^25相交的空间曲线图形。需要完整代码和结果的图片。 一、先看效果图 二、代码 % 创建figure figure% 创建二维网格&#xff0c;用于定…