習題與正則表達式

思路:

  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個或多個數字123,?0,?456
\d{3}匹配3位數字123,?456
\d{2,4}匹配2~4位數字12,?123,?1234

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77166.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77166.shtml
英文地址,請注明出處:http://en.pswp.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、加…