枚举与尺取法(蓝桥杯 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可以确保子组件在重新渲染时不会不必要地重新创建函数…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
