算法竞赛备考冲刺必刷题(C++) | AcWing 1152 格雷码

算法竞赛备考冲刺必刷题(C++) | AcWing 1152 格雷码

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

AcWing:1152. 格雷码 - AcWing题库

【题目描述】

通常,人们习惯将所有 n n n 位二进制串按照字典序排列,例如所有 2 2 2 位二进制串按字典序从小到大排列为: 00 , 01 , 10 , 11 00,01,10,11 00,01,10,11。

格雷码(Gray Code)是一种特殊的 n n n 位二进制串排列法,它要求相邻的两个二进制串间恰好有一位不同,特别地,第一个串与最后一个串也算作相邻。

所有 2 2 2 位二进制串按格雷码排列的一个例子为: 00 , 01 , 10 , 11 00,01,10,11 00,01,10,11。

n n n 位格雷码不止一种,下面给出其中一种格雷码的生成算法:

  1. 1 1 1 位格雷码由两个 1 1 1 位二进制串组成,顺序为: 0 , 1 0,1 0,1。
  2. n + 1 n+1 n+1 位格雷码的前 2 n 2^n 2n 个二进制串,可以由依此算法生成的 n n n 位格雷码(总共 2 n 2^n 2n 个 n n n 位二进制串)按顺序排列,再在每个串前加一个前缀 0 0 0 构成。
  3. n + 1 n+1 n+1 位格雷码的后 2 n 2^n 2n 个二进制串,可以由依此算法生成的 n n n 位格雷码(总共 2 n 2^n 2n 个 n n n 位二进制串)按逆序排列,再在每个串前加一个前缀 1 1 1 构成。

综上, n + 1 n+1 n+1 位格雷码,由 n n n 位格雷码的 2 n 2^n 2n 个二进制串按顺序排列再加前缀 0 0 0,和按逆序排列再加前缀 1 1 1 构成,共 2 n + 1 2^{n+1} 2n+1 个二进制串。

另外,对于 n n n 位格雷码中的 2 n 2^n 2n 个二进制串,我们按上述算法得到的排列顺序将它们从 0 ∼ 2 n − 1 0\sim 2^n-1 0∼2n−1 编号。

按该算法, 2 2 2 位格雷码可以这样推出:

  1. 已知 1 1 1 位格雷码为 0 , 1 0,1 0,1。
  2. 前两个格雷码为 00 , 01 00,01 00,01。后两个格雷码为 11 , 10 11,10 11,10。合并得到 00 , 01 , 11 , 10 00,01,11,10 00,01,11,10,编号依次为 0 ∼ 3 0\sim 3 0∼3 。

同理, 3 3 3 位格雷码可以这样推出:

  1. 已知 2 2 2 位格雷码为: 00 , 01 , 11 , 10 00,01,11,10 00,01,11,10。
  2. 前四个格雷码为: 000 , 001 , 011 , 010 000,001,011,010 000,001,011,010。后四个格雷码为: 110 , 111 , 101 , 100 110,111,101,100 110,111,101,100。合并得到: 000 , 001 , 011 , 010 , 110 , 111 , 101 , 100 000,001,011,010,110,111,101,100 000,001,011,010,110,111,101,100,编号依次为 0 ∼ 7 0\sim 7 0∼7。

现在给出 n , k n,k n,k,请你求出按上述算法生成的 n n n 位格雷码中的 k k k 号二进制串。

【输入】

仅一行,包含两个整数 n n n 和 k k k。

【输出】

仅一行,一个 n n n 位二进制串表示答案。

【输入样例】

2 3 

【输出样例】

10 

【算法标签】

《AcWing 1152 格雷码》 #递归# #位运算# #格雷码#

【代码详解】

#!代码技巧#:将数字转为unsigned long long,2ull

#include<bits/stdc++.h>usingnamespace std;// 使用unsigned long long,因为k可能很大(最大2^64-1)typedefunsignedlonglong ULL;// 递归函数:查找n位格雷码中序号为k的格雷码// 参数:n - 格雷码的位数,k - 要查找的格雷码序号(从0开始)// 返回值:序号为k的n位格雷码的二进制字符串 string find(int n, ULL k){// 递归基:当n=0时,返回空字符串if(n ==0){return"";}// 计算n位格雷码总数的一半// 对于n位格雷码,总共有2^n个,一半是2^(n-1)个 ULL len =pow(2ull, n -1);// 情况1:k在前半部分(0到len-1)// 此时格雷码的第一位是'0'if(k < len){// 递归求解n-1位格雷码,序号为k// 在前面添加'0'return"0"+find(n -1, k);}// 情况2:k在后半部分(len到2^n-1)// 此时格雷码的第一位是'1'else{// 递归求解n-1位格雷码,序号需要对称映射// 映射规则:后半部分的序号k映射为前半部分的序号(len*2-1-k)// 在前面添加'1'return"1"+find(n -1, len *2-1- k);}}intmain(){int n;// 格雷码的位数 ULL k;// 要查找的格雷码序号(从0开始) cin >> n >> k;// 输入位数n和序号k// 输出序号为k的n位格雷码 cout <<find(n, k)<< endl;return0;}

【运行结果】

2 3 10 

Read more

人工智能:扩散模型(Diffusion Model)原理与图像生成实战

人工智能:扩散模型(Diffusion Model)原理与图像生成实战

人工智能:扩散模型(Diffusion Model)原理与图像生成实战 1.1 本章学习目标与重点 💡 学习目标:掌握扩散模型的核心原理、前向扩散与反向扩散过程,以及基于扩散模型的图像生成任务实战流程。 💡 学习重点:理解扩散模型的噪声添加与噪声消除机制,学会使用 PyTorch 搭建 DDPM 模型,完成手写数字图像生成任务。 1.2 扩散模型的核心思想 1.2.1 为什么需要扩散模型 💡 传统的生成模型(如 GAN)存在训练不稳定、模式崩溃等问题。扩散模型作为一种基于概率的生成模型,通过逐步添加噪声和逐步去除噪声的双向过程,实现了更稳定的训练和更高质量的生成效果。 扩散模型的灵感来源于非平衡热力学,它的核心是将复杂的生成问题拆解为多个简单的马尔可夫链步骤。在图像生成、文本生成、语音合成等领域,扩散模型的表现已经超越了传统生成模型。 1.2.2 扩散模型的基本框架 💡 扩散模型包含两个核心过程:前向扩散过程和反向扩散过程。 1. 前向扩散过程:从真实数据出发,

By Ne0inhk
OpenAI发布GPT-5.3 Instant:幻觉率最高降低26.8%,2026全球AI模型排行榜

OpenAI发布GPT-5.3 Instant:幻觉率最高降低26.8%,2026全球AI模型排行榜

🔥 个人主页:杨利杰YJlio❄️ 个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》《Python》《Kali Linux》《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更简单,让重复的工作自动化 OpenAI发布GPT-5.3 Instant:幻觉率最高降低26.8%,2026全球AI模型排行榜 * 1 GPT-5.3 Instant 发布 * 2 本次升级三大核心能力 * 2.1 降低 AI 幻觉 * 2.2 减少不必要拒答 * 2.3 网络搜索能力升级 * 3 GPT-5.3 Instant 技术架构 * 4 GPT-5.3 vs

By Ne0inhk
人工智能:计算机视觉的基础与应用

人工智能:计算机视觉的基础与应用

第十二篇:计算机视觉的基础与应用 学习目标 💡 理解计算机视觉的基本概念和重要性 💡 掌握计算机视觉中的图像处理技术、特征提取方法、常用模型与架构 💡 学会使用计算机视觉库(OpenCV、PIL、PyTorch、TensorFlow)进行图像处理、特征提取和模型训练 💡 理解图像分类、目标检测、语义分割等任务的实现方法 💡 通过实战项目,开发一个完整的计算机视觉应用 重点内容 * 计算机视觉的基本概念 * 图像处理技术(图像预处理、增强、滤波) * 特征提取方法(HOG、SIFT、ORB) * 常用模型与架构(LeNet、AlexNet、VGG、ResNet、YOLO) * 实战项目:计算机视觉应用开发(图像分类、目标检测等) 一、计算机视觉基础 1.1 计算机视觉的基本概念 计算机视觉(Computer Vision)是人工智能的一个重要分支,它涉及计算机与图像之间的交互。其目标是让计算机能够理解和解释图像内容,

By Ne0inhk
(第四篇)Spring AI 核心技术攻坚:多轮对话与记忆机制,打造有上下文的 AI

(第四篇)Spring AI 核心技术攻坚:多轮对话与记忆机制,打造有上下文的 AI

摘要         在大模型应用开发中,“上下文丢失” 是多轮对话场景的核心痛点,直接导致 AI 回复割裂、用户体验拉胯。本文基于 Spring AI 生态,从对话记忆的本质出发,深度拆解短期 / 长期 / 摘要三类记忆的设计逻辑,对比 Redis 缓存与数据库持久化的技术选型方案,详解上下文压缩的关键技巧,并通过完整实战案例,手把手教你构建支持 100 轮对话的高可用智能客服。全程贯穿 “从内存存储到分布式记忆” 的进阶思路,既有底层原理剖析,又有可直接落地的代码实现,帮你彻底掌握 Spring AI 记忆机制的核心玩法。 引言         用过 Spring AI 开发对话应用的同学都懂:默认情况下 LLM 是 “鱼的记忆”—— 每次请求都是独立会话,无法记住上一轮的对话内容。比如智能客服场景中,用户先说明 “我要查询订单物流”,再提供 “订单号 12345”

By Ne0inhk