藍橋杯備考-》單詞接龍

很明顯,這道題是可以用DFS來做的,我們直接暴力搜索,但是這里有很多點是我們需要注意的。

1.我們如何確定兩個單詞能接上?

比如touch和choose 應該合成為touchoose?

就是這樣兩個單詞,我們讓一個指針指著第一個字符串的末尾,一個指著開頭,然后一個截取后面的子串,一個截取前面的子串,如果相等的話,就拼上

我們要截取的就是s1.substr(cur1)? ?和 s2.substr(0,cur2+1); 然后判斷是否相等,如果相等的話就拼接上

2.我們如何避免 at連接atide這種情況呢?

我們截取子串的時候別截取到全部的就行,我們讓cur1>=1 cur2<s2.size()-1

3.我們不能用全局的字符串,因為那樣回溯的話很難回溯,我們應該把字符串放在參數了

4.我們定義一個cnt數組來給dfs剪紙,因為每個單詞只能用兩遍

5.我們不能直接傳開頭,那樣的話都進不去dfs函數,我們要遍歷一遍所有的字符串,找到開頭一樣的字符串進入dfs

好的,既然我們知道了所有的細節,我們來實現一下代碼吧

#include <iostream>
using namespace std;
const int N = 30;
string s[N];
int n;
int cnt[N];
int ret = 0;
void dfs(string path)
{if(ret<path.size()){ret = path.size();}for(int i = 1;i<=n;i++){if(cnt[i] >= 2) continue;int cur1 = path.size()-1;int cur2 = 0;while(cur1>=1 && cur2 < s[i].size()-1){if(path.substr(cur1)==s[i].substr(0,cur2+1)){cnt[i]++;dfs(path+s[i].substr(cur2+1));cnt[i]--;}cur1--,cur2++;}}
}int main()
{cin >> n;for(int i =1;i<=n;i++){cin >> s[i];}char ch ;cin >> ch;for(int i = 1;i<=n;i++){if(s[i][0] == ch){cnt[i]++;dfs(s[i]);cnt[i]--;}}cout << ret << endl;return 0;
}

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

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言-訪問者模式詳解與實踐

C語言訪問者模式詳解與實踐 - 傳感器數據處理系統 1. 什么是訪問者模式&#xff1f; 在嵌入式系統中&#xff0c;我們經常需要對不同傳感器的數據進行多種處理&#xff0c;如數據校準、過濾、存儲等。訪問者模式允許我們在不修改傳感器代碼的情況下&#xff0c;添加新的數據處…

(UI自動化測試web端)第二篇:元素定位的方法_xpath路徑定位

1、第一種xpath路徑定位&#xff1a; 絕對路徑&#xff1a;表達式是以 /html開頭&#xff0c;元素的層級之間是以 / 分隔相同層級的元素可以使用下標&#xff0c;下標是從1開始的需要列出元素所經過的所有層級元素&#xff0c;工作當中一般不使用絕對路徑 例&#xff1a;/html/…

設置GeoJSONVectorTileLayer中的line填充圖片

設置GeoJSONVectorTileLayer中的line填充圖片 關鍵&#xff1a;linePatternFile const style [{filter: true,renderPlugin: {dataConfig: {type: "line",},type: "line",},symbol: {linePatternFile: "http://examples.maptalks.com/resources/pat…

electron框架(4.0)electron-builde和electron Forge的打包方式

----使用electron-builder打包&#xff08;需要魔法&#xff09; --安裝electron-builder: npm install electron-builder -D--package.json中進行相關配置&#xff1a; {"name": "video-tools","version": "1.0.0","main&quo…

讓 MGR 不從 Primary 的節點克隆數據?

問題 MGR 中&#xff0c;新節點在加入時&#xff0c;為了與組內其它節點的數據保持一致&#xff0c;它會首先經歷一個分布式恢復階段。在這個階段&#xff0c;新節點會隨機選擇組內一個節點&#xff08;Donor&#xff09;來同步差異數據。 在 MySQL 8.0.17 之前&#xff0c;同…

第三十二篇 深入解析Kimball維度建模:構建企業級數據倉庫的完整框架

目錄 一、維度建模設計原則深度剖析1.1 業務過程驅動設計1.2 星型模式VS雪花模式 二、維度建模五步法實戰&#xff08;附完整案例&#xff09;2.1 業務需求映射2.2 模型詳細設計2.3 緩慢變化維處理 三、高級建模技術解析3.1 漸變維度橋接表3.2 快照事實表設計 四、性能優化體系…

IntelliJ IDEA 中 Maven 的 `pom.xml` 變灰帶橫線?一文詳解解決方法

前言 在使用 IntelliJ IDEA 進行 Java 開發時&#xff0c;如果你發現項目的 pom.xml 文件突然變成灰色并帶有刪除線&#xff0c;這可能是 Maven 的配置或項目結構出現了問題。 一、問題現象與原因分析 現象描述 文件變灰&#xff1a;pom.xml 在項目資源管理器中顯示為灰色。…

緩存過期時間之邏輯過期

1. 物理不過期&#xff08;Physical Non-Expiration&#xff09; 定義&#xff1a;在Redis中不設置EXPIRE時間&#xff0c;緩存鍵永久存在&#xff08;除非主動刪除或內存淘汰&#xff09;。目的&#xff1a;徹底規避因緩存自動過期導致的擊穿&#xff08;單熱點失效&#xff…

基于WebAssembly的瀏覽器密碼套件

目錄 一、前言二、WebAssembly與瀏覽器密碼套件2.1 WebAssembly技術概述2.2 瀏覽器密碼套件的需求三、系統設計思路與架構3.1 核心模塊3.2 系統整體架構圖四、核心數學公式與算法證明4.1 AES-GCM加解密公式4.2 SHA-256哈希函數五、異步任務調度與GPU加速設計5.1 異步任務調度5.…

Qt的內存管理機制

在Qt中&#xff0c;顯式使用new創建的對象通常不需要顯式調用delete來釋放內存&#xff0c;這是因為Qt提供了一種基于對象樹(Object Tree)和父子關系(Parent-Child Relationship)的內存管理機制。這種機制可以自動管理對象的生命周期&#xff0c;確保在適當的時候釋放內存&…

數據結構之雙向鏈表-初始化鏈表-頭插法-遍歷鏈表-獲取尾部結點-尾插法-指定位置插入-刪除節點-釋放鏈表——完整代碼

數據結構之雙向鏈表-初始化鏈表-頭插法-遍歷鏈表-獲取尾部結點-尾插法-指定位置插入-刪除節點-釋放鏈表——完整代碼 #include <stdio.h> #include <stdlib.h>typedef int ElemType;typedef struct node{ElemType data;struct node *next, *prev; }Node;//初化鏈表…

【Linux網絡-五種IO模型與阻塞IO】

一、引入 網絡通信的本質就是進程間的通信&#xff0c;進程間通信的本質就是IO&#xff08;Input&#xff0c;Output&#xff09; I/O&#xff08;input/output&#xff09;也就是輸入和輸出&#xff0c;在馮諾依曼體系結構當中&#xff0c;將數據從輸入設備拷貝到內存就叫作…

算法-最大公約數

1、約數&#xff1a; 1.1 試除法求約數 原理&#xff1a;只需要遍歷最小的約數即可&#xff0c;較大的那個可以直接算出來。 import java.util.*; public class Main {static Scanner sc new Scanner(System.in);public static void main(String[] args) {int t sc.nextIn…

湖北楚大夫

品牌出海已成為眾多企業拓展業務、提升競爭力的關鍵戰略。楚大夫(chudafu.com)作為一家專注于品牌出海、海外網絡營銷推廣以及外貿獨立站搭建的公司&#xff0c;憑借其專業、高效、創新的服務模式&#xff0c;致力于成為中國企業走向國際市場的堅實后盾與得力伙伴。楚大夫通過綜…

Flutter 學習之旅 之 flutter 使用 connectivity_plus 進行網路狀態監聽(斷網/網絡恢復事件監聽)

Flutter 學習之旅 之 flutter 使用 connectivity_plus 進行網路狀態監聽&#xff08;斷網/網絡恢復事件監聽&#xff09; 目錄 Flutter 學習之旅 之 flutter 使用 connectivity_plus 進行網路狀態監聽&#xff08;斷網/網絡恢復事件監聽&#xff09; 一、簡單介紹 二、conne…

從零開始實現 C++ TinyWebServer 處理請求 HttpRequest類詳解

文章目錄 HTTP 請求報文HttpRequest 類實現 Init() 函數實現 ParseRequestLine() 函數實現 ParseHeader() 函數實現 ParsePath() 函數實現 ParseBody() 函數實現 ParsePost() 函數實現 ParseFromUrlEncoded() 函數實現 UserVerify() 函數實現 Parse() 函數HttpRequest 代碼Http…

systemd-networkd 的 *.network 配置文件詳解 筆記250323

systemd-networkd 的 *.network 配置文件詳解 筆記250323 查看官方文檔可以用 man systemd.network命令, 或訪問: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html 名稱 systemd.network — 網絡配置 概要 network.network 描述 一個純…

自定義mavlink 生成wireshark wlua插件錯誤(已解決)

進入正題 python3 -m pymavlink.tools.mavgen --langWLua --wire-protocol2.0 --outputoutput/develop message_definitions/v1.0/development.xml 編譯WLUA的時候遇到一些問題 1.ERROR:SCHEMASV:SCHEMAV_CVC_ENUMERATION_VALID 3765:0:ERROR:SCHEMASV:SCHEMAV_CVC_ENUMERAT…

計算機操作系統(四) 操作系統的結構與系統調用

計算機操作系統&#xff08;四&#xff09; 操作系統的結構與系統調用 前言一、操作系統的結構1.1 簡單結構1.2 模塊化結構1.3 分層化結構1.4 微內核結構1.5 外核結構 二、系統調用1.1 系統調用的基本概念1.2 系統調用的類型 總結&#xff08;核心概念速記&#xff09;&#xf…

深入解析 Spring IOC AOP:原理、源碼與實戰

深入解析 Spring IOC & AOP&#xff1a;原理、源碼與實戰 Spring 框架的核心在于 IOC&#xff08;控制反轉&#xff09; 和 AOP&#xff08;面向切面編程&#xff09;。今天&#xff0c;我們將深入剖析它們的原理&#xff0c;結合源碼解析&#xff0c;并通過 Java 代碼實戰…