习题与正则表达式

思路:

  1. 二分查找

    • left = 1(最小可能距离),right = L(最大可能距离)。

    • 每次取 mid = (left + right) / 2,判断是否可以通过增设 ≤ K 个路标使得所有相邻路标的距离 ≤ mid

  2. 贪心验证

    • 遍历所有相邻原始路标,计算它们之间的 gap

    • 对于每个 gap,计算需要插入的路标数 (gap - 1) / mid

    • 如果总增设数 required ≤ K,则 mid 可行,尝试更小的 mid;否则尝试更大的 mid

  3. 输出答案

    • 最终 ans 即为最小的“空旷指数”。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {int L, N, K;cin >> L >> N >> K;vector<int> markers(N);for (int i = 0; i < N; i++) {cin >> markers[i];}int left = 1;  // 最小可能距离int right = L;  // 最大可能距离int ans = L;// 二分查找最小的“空旷指数”while (left <= right) {int mid = (left + right) / 2;int required = 0;  // 需要增设的路标数量// 计算需要增设多少路标才能让所有间隔 ≤ midfor (int i = 1; i < N; i++) {int gap = markers[i] - markers[i - 1];required += (gap - 1) / mid;}if (required <= K) {ans = mid;right = mid - 1;  // 尝试更小的“空旷指数”} else {left = mid + 1;  // 需要更大的“空旷指数”}}cout << ans << endl;return 0;
}

 
 

思路:

  1. backtrack函数:这是递归回溯的核心函数。

    • n是目标美味程度,current是当前配料组合,sum是当前组合的总和,index是当前处理的配料索引。

    • 当处理完所有10个配料(index == 10),检查总和是否等于n,如果是,则保存当前组合。

    • 对于当前配料,尝试1、2、3克,递归处理下一个配料。通过剪枝条件提前终止无效的递归路径。

#include <iostream>
#include <vector>
using namespace std;vector<vector<int>> solutions;  // 存储所有解决方案void backtrack(int n, vector<int>& current, int sum, int index) {if (index == 10) {if (sum == n) {solutions.push_back(current);}return;}// 尝试1、2、3克for (int i = 1; i <= 3; ++i) {if (sum + i > n) continue;  // 剪枝:总和超过n,跳过// 剩下的配料即使全选1克也无法达到n,剪枝if (sum + i + (10 - index - 1) > n) continue;current[index] = i;backtrack(n, current, sum + i, index + 1);}
}int main() {int n;cin >> n;vector<int> current(10);  // 当前组合backtrack(n, current, 0, 0);cout << solutions.size() << endl;for (const auto& sol : solutions) {for (int i = 0; i < 10; ++i) {cout << sol[i] << " ";}cout << endl;}return 0;
}

正则表达式 

基本概念

  • 字符组:用方括号 [] 表示,用于匹配方括号内的任意一个字符。例如,[abc] 可以匹配 ab 或 c 中的任意一个字符。
  • 量词:用于指定前面的字符或字符组出现的次数。常见的量词有 *(零次或多次)、+(一次或多次)、?(零次或一次)、{n}(恰好 n 次)、{n,}(至少 n 次)、{n,m}n 到 m 次)。例如,a* 表示匹配零个或多个 aa{2,4} 表示匹配 2 到 4 个 a
  • 元字符:具有特殊含义的字符,如 ^ 表示匹配字符串的开头,$ 表示匹配字符串的结尾,. 表示匹配除换行符以外的任意一个字符。例如,^a 表示以 a 开头的字符串,a$ 表示以 a 结尾的字符串。
  • 转义字符:用反斜杠 \ 表示,用于转义元字符,使其失去特殊含义,而表示其本身。例如,\. 表示匹配字符 .\\ 表示匹配字符 \

常用操作

  • 匹配:使用正则表达式来检查一个字符串是否符合特定的模式。例如,判断一个字符串是否是有效的电子邮件地址,可以使用正则表达式 ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
  • 查找:在一个字符串中查找符合正则表达式模式的子串。例如,在一篇文章中查找所有的电话号码,可以使用正则表达式 \d{3}-\d{8}|\d{4}-\d{7}
  • 替换:将匹配到的字符串替换为指定的内容。例如,将字符串中的所有数字替换为 *,可以使用正则表达式 \d 和替换字符串 *
  • 分割:根据正则表达式的模式将字符串分割成多个子串。例如,将一个逗号分隔的字符串分割成数组,可以使用正则表达式 ,

示例

  • 匹配手机号码:^1[3-9]\d{9}$。这个正则表达式表示以 1 开头,第二位是 3 到 9 中的任意一个数字,后面跟着 9 个数字。
  • 匹配身份证号码:^\d{17}[\dXx]$。表示由 17 位数字和最后一位数字或 X(或 x)组成。
     
元字符说明
.匹配任意单个字符(除换行符 \n
^匹配字符串的开头
$匹配字符串的结尾
*匹配前面的字符0次或多次
+匹配前面的字符1次或多次
?匹配前面的字符0次或1次
{n}匹配前面的字符恰好n次
{n,}匹配前面的字符至少n次
{n,m}匹配前面的字符n到m次
[...]匹配括号内的任意一个字符(字符类)
[^...]匹配不在括号内的任意字符
``(匹配左边或右边的模式)
\d匹配数字(等价于 [0-9]
\D匹配非数字(等价于 [^0-9]
\w匹配字母、数字、下划线(等价于 [a-zA-Z0-9_]
\W匹配非字母、数字、下划线
\s匹配空白字符(空格、制表符、换行符等)
\S匹配非空白字符
\b匹配单词边界
\B匹配非单词边界

3. 正则表达式示例

(1) 匹配数字

正则表达式说明匹配示例
\d+匹配1个或多个数字1230456
\d{3}匹配3位数字123456
\d{2,4}匹配2~4位数字121231234

 

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

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

相关文章

最小K个数

文章目录 题意思路代码 题意 题目链接 思路 代码 class Solution { public:vector<int> smallestK(vector<int>& arr, int k) {priority_queue<int> Q;for (auto &index:arr){Q.push(index);if (Q.size() > k)Q.pop();}vector<int> ans…

<tauri><rust><GUI>基于rust和tauri,将tauri程序打包为window系统可安装的安装包(exe、msi)

前言 本文是基于rust和tauri,由于tauri是前、后端结合的GUI框架,既可以直接生成包含前端代码的文件,也可以在已有的前端项目上集成tauri框架,将前端页面化为桌面GUI。 发文平台 CSDN 环境配置 系统:windows 10平台:visual studio code语言:rust、javascript库:taur…

SAP系统采购信息记录失效

问题&#xff1a;采购信息记录失效 现象&#xff1a;最初主数据导入完成之后&#xff0c;单元测试的时采购信息记录是有效的&#xff0c;中间经过配置的变化&#xff0c;集成测试初期发现采购信息记录全部失效。 原因&#xff1a; 单元测试时发现采购订单里面的条件类型…

视频分析设备平台EasyCVR打造汽车门店经营场景安全:AI智慧安防技术全解析

一、方案背景 某电动车企业不停爆出维权新闻&#xff0c;支持和反对的声音此起彼伏&#xff0c;事情不断发酵、反转&#xff0c;每天都有新消息&#xff0c;令人目不暇接。车展、车店作为维权事件的高发场所&#xff0c;事后复盘和责任认定时&#xff0c;安防监控和视频监控平…

ecovadis认证基本概述,ecovadis认证审核有效期

EcoVadis认证基本概述 1. 什么是EcoVadis认证&#xff1f; EcoVadis是全球领先的企业可持续发展&#xff08;ESG&#xff09;评级平台&#xff0c;专注于评估企业在**环境&#xff08;E&#xff09;、劳工与人权&#xff08;S&#xff09;、商业道德&#xff08;L&#xff09…

初入Web网页开发

1、网页哪些内容 1.1 三个核心文件的作用 index.html&#xff1a;网页的骨架&#xff0c;用HTML编写网页结构和内容。 script.js&#xff1a;网页的行为&#xff0c;用JavaScript实现交互功能&#xff08;如按钮点击事件&#xff09;。 styles.css&#xff1a;网页的外观&…

CSS 符号

在 CSS 中&#xff0c;& 符号是 嵌套语法中的父选择器引用符&#xff0c;主要用于 CSS 预处理器&#xff08;如 Sass、Less、Stylus&#xff09;和 现代 CSS 嵌套语法&#xff08;CSS Nesting&#xff09;。它代表当前选择器的父级&#xff0c;用于简化嵌套规则并生成更精确…

小白入门JVM、字节码、类加载机制图解

前提知识~ JDK 基本介绍 JDK 的全称(Java Development Kit Java 开发工具包)JDK JRE java 的开发工具[java, javac,javadoc,javap 等]JDK 是提供给Java 开发人员使用的&#xff0c;其中包含了java 的开发工具&#xff0c;也包括了JRE。可开发、编译、调试…… JRE 基本介绍…

consul服务注册与发现(go)-学习笔记

参考博客 1、服务实例接口与默认实现 type ServiceInstance interface {// 获取服务实例的唯一IDGetInstanceId() string// 获取服务IDGetServiceId() string// 获取服务实例的主机名或IP地址GetHost() string// 获取服务实例的端口号GetPort() int// 判断服务实例是否使用HT…

【AI】prompt engineering

prompt engineering ## prompt engineering ## prompt engineering ## prompt engineering 一、定义 Prompt 工程&#xff08;Prompt Engineering&#xff09;是指在使用语言模型&#xff08;如 ChatGPT、文心一言等&#xff09;等人工智能工具时&#xff0c;设计和优化输入提…

Python 字典和集合(常见的映射方法)

本章内容的大纲如下&#xff1a; 常见的字典方法 如何处理查找不到的键 标准库中 dict 类型的变种set 和 frozenset 类型 散列表的工作原理 散列表带来的潜在影响&#xff08;什么样的数据类型可作为键、不可预知的 顺序&#xff0c;等等&#xff09; 常见的映射方法 映射类型…

对抗Prompt工程:构建AI安全护栏的攻防实践

大语言模型的开放性与自然语言交互特性使其面临前所未有的Prompt工程攻击威胁。本文通过分析2021-2023年间157个真实越狱案例&#xff0c;揭示语义混淆、上下文劫持、多模态组合三重攻击路径的技术原理&#xff0c;提出融合动态意图拓扑分析&#xff08;DITA&#xff09;、对抗…

STL c++ list——模拟实现

结点类的模拟实现 list是一个带头双向循环链表 因需要实现一个节点类&#xff0c;其中包含哨兵位&#xff08;用来标识位置&#xff09;&#xff0c;节点信息&#xff08;val数据&#xff0c;prev后指针&#xff0c;next后指针&#xff09; template<class T> struct …

ORM、Mybatis和Hibernate、Mybatis使用教程、parameterType、resultType、级联查询案例、resultMap映射

DAY21.1 Java核心基础 ORM Object Relationship Mapping 对象关系映射 面向对象的程序到—关系型数据库的映射 比如java – MySQL的映射 ORM框架就是实现这个映射的框架 Hibernate、Mybatis、MybatisPlus、Spring Data JPA、Spring JDBC Spring Data JPA的底层就是Hiber…

【学习自用】配置文件中的配置项

server.port服务器端口&#xff0c;常被用于指定应用程序运行时所监听的端口号spring.datasource.url用于配置数据源的数据库连接URLspring.datasource.username用于指定连接数据库的用户名spring.datasource.password用于配置数据源时设置数据库连接密码的属性mybatis.mapper-…

使用protobuf编译提示无法打开包括文件: ‘absl/log/absl_log.h’: No such file or directory

问题原因 Protobuf 依赖 Abseil&#xff1a; Protobuf 3.20 版本开始依赖 Abseil&#xff0c;但你的系统未正确安装或配置 Abseil。 头文件路径未包含&#xff1a; 编译器找不到 absl/log/absl_log.h&#xff0c;可能是因为 Abseil 未正确安装或未在项目中设置包含路径。 …

Spring AI Alibaba 文档检索使用

一、文档检索 (Document Retriever)简介 1、核心概念 文档检索&#xff08;DocumentRetriever&#xff09;是一种信息检索技术&#xff0c;旨在从大量未结构化或半结构化文档中快速找到与特定查询相关的文档或信息。文档检索通常以在线(online)方式运行。 DocumentRetriever通…

前端面试核心知识点整理:从 JavaScript 到 Vue 全解析

一、JavaScript 异步编程核心:Promise 与 async/await 1. Promise 深度解析 定义:Promise 是处理异步操作的对象,代表一个异步操作的最终状态(成功 / 失败)。三种状态: pending(进行中):初始状态,异步操作未完成。fulfilled(已成功):异步操作成功,调用 resolve …

音视频(四)android编译

前言 前面已经讲了在windows上应用了&#xff0c;这章主要讲述android上编译 1&#xff1a;环境 git 如果失败 直接跑到相应网站 手动下载 ubuntu22.* android ndk r21e download:https://developer.android.google.cn/ndk/downloads/index.html?hluk 为什么用这个&#xff0…

【kind管理脚本-3】脚本函数说明文档 —— 便捷使用 kind 创建、删除、管理集群脚本

下面是一份详细的说明文档&#xff0c;介绍该脚本的功能、用法及各部分的含义&#xff0c;供您参考和使用&#xff1a; Kind 集群管理脚本说明文档 此脚本主要用于管理 Kind&#xff08;Kubernetes IN Docker&#xff09;集群&#xff0c;提供创建、删除、导出 kubeconfig、加…