枚举与尺取法(蓝桥杯 c++ 模板 题目 代码 注解)
目录
组合型枚举(排列组合模板()):
排列型枚举(全排列)模板:
题目一(公平抽签 排列组合):
编辑 代码:
题目二(座次问题 全排列):
代码:
题目三(排列序数):
代码:
题目四( 美丽的区间 尺取法):
代码:
题目五(奇怪的动物园 尺取法):
代码:
组合型枚举(排列组合模板(
)):
#include <iostream>//排列组合
#include <vector>
using namespace std;
int n, m;
vector<int> chosen;
void calc(int k)
{if ((chosen.size() > m) || (chosen.size() + n - k + 1) < m)//选太多了,选太少了,chosen.size()表示选了几个return;if (k == n + 1)//最后一个数都已经选完了{for (int i = 0; i < chosen.size(); i++)cout << chosen[i]<<" ";//输出第i个为几cout << endl;return;}chosen.push_back(k);//选数字kcalc(k + 1);//继续往深度遍历chosen.pop_back();//不选数字kcalc(k + 1);//继续往深度遍历
}
int main()
{cin >> n >> m;calc(1);//从一开始
}
排列型枚举(全排列)模板:
#include <iostream>//排列型枚举,全排列
#include <vector>
using namespace std;
int n;
int chosen[20];
int book[20] = { 0 };
void calc(int k)
{if (k == n + 1)//最后一个数都已经选完了{for (int i = 1; i <= n; i++)cout << chosen[i]<<" ";//输出第i个为几cout << endl;return;}for (int i = 1; i <= n; i++){if (book[i])//标记是否用过continue;book[i] = 1;//标记为用了chosen[k] = i;//第k个为数字icalc(k + 1);//继续往深度遍历book[i] = 0;//回溯,没访问过ichosen[k] = 0;}
}
int main()
{cin >> n;calc(1);//从一开始
}
题目一(公平抽签 排列组合):
代码:
#include<iostream>
#include<vector>
using namespace std;
int n, m;
vector<int> chosen;
vector<string> name;
void calc(int k)
{if (chosen.size() > m || chosen.size() + (n - k + 1) < m)//选多了或者选少了,chosen.size()表示选了几个return;if (k == n + 1)//最后一个也已经选完了{for (int i = 0; i < chosen.size(); i++)cout << name[chosen[i]-1] << " ";cout << endl;}chosen.push_back(k);//选数字kcalc(k + 1);//继续往深度遍历chosen.pop_back();//不选数字kcalc(k + 1);//继续往深度遍历
}
int main()
{cin >> n >> m;for (int i = 0; i < n; i++){string s;cin >> s;name.push_back(s);}calc(1);
}
题目二(座次问题 全排列):
代码:
#include<iostream>
#include<vector>
using namespace std;
int n;
int chosen[15];
int book[15];//标记是否访问过
string name[15];
void calc(int k)
{if (k == n + 1)//最后一个数都已经选完了{for (int i = 1; i <= n; i++)//输出该排列{cout << name[chosen[i] - 1] << " ";//name下标从0开始}cout << endl;return;}for (int i = 1; i <= n; i++){if (book[i])//标记是否用过continue;book[i] = 1;//标记为用了chosen[k] = i;//第k个为数字icalc(k + 1);//继续往深度遍历book[i] = 0;//回溯,没访问过ichosen[k] = 0;}
}
int main()
{cin >> n;for (int i = 0; i < n; i++){cin >> name[i];}calc(1);//从第一个开始
}
题目三(排列序数):
代码:
#include <iostream>//用next_permutation函数进行全排列
#include <algorithm>
using namespace std;
int main()
{long long cnt=0;//记录个数string s;string s1;cin >> s;s1 = s;sort(s.begin(), s.end());//从大到小排序do {if (s == s1)//相等的时候跳出break;cnt++;} while (next_permutation(s.begin(), s.end()));//开始遍历cout << cnt;}
尺取法是一种线性的高效率算法。记(L,R)为一个序列内以L为起点的最短合法区间,如果R随L的增大而增大的,就可以使用尺取法。具体的做法是不断的枚举L,同时求出R。因为R随L增大而增大,所以总时间复杂度为O(n)
题目四( 美丽的区间 尺取法):
代码:
#include <iostream>
using namespace std;
int n, s;
int ans = 1e8, sum = 0;
int a[100010];
int main()
{cin >> n >> s;for (int i = 1; i <= n; i++)cin >> a[i];for (int l = 1, r = 1; r <= n; ){if(sum<s)//不大于s,则加上,往右遍历{sum+=a[r],r++;}else{ans=min(r-l,ans);//取小的sum-=a[l];//减掉最左边l++;//往下遍历}}if (ans == 1e8)//不存在cout << 0;elsecout << ans;
}
题目五(奇怪的动物园 尺取法):
代码:
#include<iostream>
using namespace std;
int n, m, cnt,ans,ansl=0,ansr=0;//ans记录票价
int a[1010];
int b[1010];//记录x类动物的数量
void In(int x)
{if (b[x] == 0) cnt++;//之前没有x类动物,现在加入了,种类cnt++b[x]++;//x类动物数量加一
}
void De(int x)
{if (b[x] == 1) cnt--;//之前有一个x类动物,现在删掉,种类cnt--b[x]--;//x类动物数量减一
}
int main()
{cin >> n >> m;for (int i = 1; i <= n; i++){cin >> a[i];}ans = n;//最大为一共有的动物数量for (int l = 1, r = 1; r <= n; r++){In(a[r]);//a[r]这类动物加入while (1){De(a[l]);//删掉最左边类动物if (cnt == m) l++;//删了,cnt等于m,所有种类都选到了,则l++else//删了这类动物,不满足cnt等于m,还是要把这类动物加入{In(a[l]);break;}}if (cnt == m && r - l + 1 < ans)//满足所有动物都能看,票价更低了,更新左区间和右区间{ans = r - l + 1;ansl = l, ansr = r;}}if (ansl != 0)cout << ansl << " " << ansr;elsecout << 1 << n;
}
相关文章:

枚举与尺取法(蓝桥杯 c++ 模板 题目 代码 注解)
目录 组合型枚举(排列组合模板()): 排列型枚举(全排列)模板: 题目一(公平抽签 排列组合): 编辑 代码: 题目二(座次问题 全排…...

11、电源管理入门之Regulator驱动
目录 1. Regulator驱动是什么? 2. Regulator框架介绍 2.1 regulator consumer 2.2 regulator core 2.3 regulator driver 3. DTS配置文件及初始化 4. 运行时调用 5. Consumer API 5.1 Consumer Regulator Access (static & dynamic drivers) 5.2 Regulator Outp…...

24年证券从业考试注册报名流程详细图解,千万不要错过报名哦!
(一)时间安排 考生报名缴费时间:3月5日15时至3月8日15时 退费时间:3月7日15时至3月10日15时 准考证打印时间:3月20日15时至3月23日18时 (二)注册流程 1、进入中国证券业协会网站-从业人员管理-考…...

Git入门学习笔记
Git 是一个非常强大的分布式版本控制工具! 在下载好Git之后,鼠标右击就可以显示 Git Bash 和 Git GUI,Git Bash 就像是在电脑上安装了一个小型的 Linux 系统! 1. 打开 Git Bash 2. 设置用户信息(这是非常重要的&…...

⭐每天一道leetcode:27.移除元素(简单;vector)
⭐今日份题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中…...
如何处理Android内存泄漏和性能优化
处理Android内存泄漏和性能优化是一个复杂的过程,涉及到对应用的深入理解和良好的编程习惯。以下是一些关键的步骤和建议: 1. **理解内存泄漏的本质**: - 内存泄漏(Memory Leak)发生在程序中,当不再需要…...

应用方案 | D722 9MHz,轨对轨I/O CMOS运放,低噪声、低电压、低功耗运放,应用广泛
D722是低噪声、低电压、低功耗运放,应用广泛。D722具有9MHz的高增益带宽积,转换速率为8.5V/μs,静态电流为1.7mA(5V电源电压)。 D722具有低电压、低噪声的特点,并提供轨到轨输出能力,D722的最大…...

小程序常用样式和组件
常用样式和组件 1. 组件和样式介绍 在开 Web 网站的时候: 页面的结构由 HTML 进行编写,例如:经常会用到 div、p、 span、img、a 等标签 页面的样式由 CSS 进行编写,例如:经常会采用 .class 、#id 、element 等选择器…...

《Redis 设计与实现》读书概要
注: 《Redis 设计与实现》一书基于 Redis 2.9 版本编写,部分内容已过时,过时之处本文会有所说明。本文为读书笔记,部分简单和日常使用较少的知识点未记录。原书网页版地址 https://redisbook.com/ 一、底层数据结构 SDS(Simple Dy…...

Docker之数据卷自定义镜像
文章目录 前言一、数据卷二、自定义镜像 前言 Docker提供了一个持久化存储数据的机制,与容器生命周期分离,从而带来一系列好处: 总的来说Docker 数据卷提供了一种灵活、持久、可共享的存储机制,使得容器化应用在数据管理方面更加…...

Docker技术概论(4):Docker CLI 基本用法解析
Docker技术概论(4) Docker CLI 基本用法解析 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:http…...

【JAVA重要知识 | 第五篇】暴打Java8新特性—(Lambda、方法引用、Stream流、函数式接口、Date Time API、Optional类)
文章目录 5.Java8新特性5.1新特性列表5.2Lambda 表达式5.2.1函数式思想5.2.2举例(1)方式一:创建对象(2)方式二:匿名内部类(3)方式三:Lambda 5.2.3Lambda表达式的标准格式…...

Docker Swarm全解析:实现微服务高可用与故障转移的秘密武器
🐇明明跟你说过:个人主页 🏅个人专栏:《Docker入门到精通》 《k8s入门到实战》🏅 🔖行路有良友,便是天堂🔖 目录 一、基本概念和介绍 1、Docker Swarm 是什么,它与 …...
编码规范(前端)
文章目录 1. 文档说明1.1 编制说明1.2 名词解释 2.前端研发规范2.1 HTML编码规范2.1.1 文档类型2.1.2 语言2.1.3 元数据2.1.4 资源加载2.1.5 页面标题2.1.6 编码风格2.1.7 标签2.1.8 属性2.1.9 语义化 2.2 CSS编码规范2.2.1 文件引用2.2.2 命名-组成元素 知识点 1. 文档说明 1…...

【JavaEE进阶】部署Web项目到Linux服务器
文章目录 🍃前言🍀什么是部署🌲环境配置🚩数据准备🚩程序配置⽂件修改 🎄构建项目并打包🎋上传Jar包到服务器,并运行🚩上传Jar包🚩运行程序🚩开放端口号 &…...

就业班 2401--3.1 Linux Day9--文件查找和压缩
一、文件查找与打包压缩 grep: 文件内容过滤 [rootqfedu.com ~]# grep root /etc/passwd #从/etc/passwd文件中过滤root字段 grep ^root root$ root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin 查找命令 [rootqfedu.com ~]# which ls ali…...

「滚雪球学Java」:JDBC(章节汇总)
🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!…...
RT-DETR改进RepVGG结构:简单但功能强大的卷积神经网络架构
💡本篇内容:RT-DETR改进RepVGG结构:简单但功能强大的卷积神经网络架构 💡🚀🚀🚀本博客 改进源代码改进 适用于 RT-DETR 按步骤操作运行改进后的代码即可 💡本文提出改进 原创 方式:二次创新,RT-DETR专属 应部分读者要求,新增一篇RepVGG 论文理论部分 + 原…...
C#进阶高级语法之LINQ :Lambda 表达式
C# 中的 LINQ (Language Integrated Query) 提供了一种声明性的数据查询和操作方法,它允许开发人员对集合、数据库等数据源进行查询和操作,而不需要编写复杂的循环和手动编码。Lambda 表达式与 LINQ 紧密相关,它提供了一种简洁的方式来定义匿…...
react hook: useCallback
useCallback的主要使用场景在于优化性能,并确保当传递回调函数给子组件时,子组件不会因为父组件的重渲染而重新创建函数。 使用场景 1.当你需要将回调函数传递给子组件时,使用useCallback可以确保子组件在重新渲染时不会不必要地重新创建函数…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...