Codeforces Round 868 (Div. 2) D. Unique Palindromes(1900,構造)

Problem - D - Codeforces

不錯的字符串構造體,記錄一下

首先注意到k≤20這一條件。對于一個長度為n的字符串,最多有n個不同的回文子串,這種情況出現在所有字符都相同時。因此,限制條件中的xi必須滿足xi≤ci,且相鄰兩個限制條件的ci差值不能超過它們之間的長度(即xi差值)。

注意到k≤20的限制,最簡便的構造方法是:為每個限制條件構造一段連續相同的字符來滿足要求。可以保證字母使用數量不超過26個,多余的部分則可以用一段連續字符來填充。

假設僅有一個限制條件,例如要求構造長度為n且包含c種不同回文子串的字符串,可以采用n-2個'a'加上"xya"循環的方式滿足需求。

當后續增加更多限制條件時,若需新增ci種不同回文子串,只需在字符串中插入ci個字符'a'+i,最后接上"xya"循環節即可。

關鍵在于循環節的銜接策略。將"axy"視為一個環形結構,包含xya、yax、axy三種循環形式。記錄前一個循環節的末尾字符為las:當las為'a'時追加"xya"循環節;當las為'x'或'y'時做相應處理。這種構造方法能有效避免產生多余回文子串。

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6 + 10;
const int mod = 1e9 + 7;
#define pii pair<int, int>
#define lowbit(x) (x & (-x))void solve()
{int n, k;cin >> n >> k;vector<int> a(k + 1), b(k + 1);for (int i = 1; i <= k; i++)cin >> a[i];for (int i = 1; i <= k; i++)cin >> b[i];// 必須滿足 b[i] ≤ a[i],增量不超長度差for (int i = 1; i <= k; i++){if (b[i] > a[i] || b[i] - b[i - 1] > a[i] - a[i - 1]){cout << "NO" << endl;return;}}// 構造第一個前綴:先填充 (b[1]-2) 個 'a',新增 b[1] 個回文string res = string(b[1] - 2, 'a');// 用循環節 “xya” 填充到恰好長度 a[1]while (res.size() < a[1])res += "xya";while (res.size() > a[1])res.pop_back();// 記錄末尾字符,用于后續選擇合適的循環節char las = res.back();for (int i = 2; i <= k; i++){string t;// 根據上次末尾 las,選擇首尾都不和 las 沖突的循環節if (las == 'a')t = "xya";else if (las == 'x')t = "yax";else if (las == 'y')t = "axy";// 新增回文:插入 (b[i] - b[i-1]) 個新字符 c = 'a'+(i-1)char c = 'a' + (i - 1);res += string(b[i] - b[i - 1], c);// 循環節填充至長度 a[i]while (res.size() < a[i])res += t;while (res.size() > a[i])res.pop_back();// 僅當末尾是循環節字符時,才更新 lasif (res.back() == 'a' || res.back() == 'x' || res.back() == 'y')las = res.back();}// 輸出結果cout << "YES" << endl;cout << res << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t = 1;cin >> t;while (t--)solve();
}

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

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

相關文章

ClickHouse 全生命周期性能優化

引言 ClickHouse作為列式存儲的OLAP數據庫&#xff0c;以其極致的查詢性能著稱&#xff0c;但"高性能"并非開箱即用。不合理的表設計、SQL寫法或集群配置&#xff0c;可能導致性能衰減甚至服務不可用。本文基于ClickHouse 24.3版本&#xff0c;從設計規范、開發規范、…

Linux sed 命令 詳解

在 Linux 系統中&#xff0c;sed&#xff08;Stream Editor&#xff09;是一個非常強大且靈活的文本處理工具。它不僅可以用于簡單的文本替換、刪除和插入操作&#xff0c;還能實現復雜的文本轉換任務。 &#x1f4cc; 一、什么是 sed&#xff1f; sed 是一個基于模式匹配對文…

項目進度同步不及時,如何提升信息透明度

項目進度同步不及時的核心問題包括溝通渠道不暢通、缺乏統一的信息平臺、未建立明確的進度更新機制、團隊意識不足、責任劃分不明確等。其中&#xff0c;缺乏統一的信息平臺最為關鍵。統一的信息平臺能夠確保所有相關人員實時掌握最新的進度狀態&#xff0c;避免信息孤島&#…

使用各種CSS美化網頁

實驗目的1.理解CSS的概念&#xff0c;掌握CSS定義樣式的方法&#xff0c;具備使用CSS和相關庫進行界面樣式設計的能力。 2.掌握Bootstrap 5的基本使用方法。3.Bootstrap框架練習實驗步驟1. 實驗準備創建一個HTML文件&#xff08;如 index.html&#xff09;。引入Bootstrap5的CS…

在PPT的文本框中,解決一打字,英文雙引號就變成中文了

問題&#xff1a;在制作PPT的過程中&#xff0c;插入文本框&#xff0c;在里面輸入代碼類的格式時&#xff0c;使用英文的雙引號""&#xff0c;但是只要在后面輸入內容&#xff0c;或者逗號等&#xff0c;英文雙引號就變成中文了&#xff0c;很煩原因&#xff1a;大概…

iOS 證書過期如何處理

找到鑰匙串位置創建新的CSR文件。點擊菜單中鑰匙串訪問—>證書助理—>從證書頒發機構請求證書…進入證書助理&#xff0c;填寫信息&#xff08;用戶名稱和郵箱隨便寫&#xff09;&#xff0c;請求是 選擇 存儲到磁盤創建好CSR文件&#xff0c;回到developer 證書管理中心…

CODESYS + 全志T113-i + 國產系統OneOS,打造新一代工業控制解決方案!

創龍科技與中移物聯網有限公司、CODESYS攜手合作&#xff0c;成功實現了T113-i工業評估板對國產系統OneOS CODESYS軟件的適配&#xff0c;此舉將讓工業自動化領域的工程師們更高效地開發&#xff0c;并為眾多企業產品的快速上市提供強有力的保障。 解決方案簡介 CODESYS簡介 …

三、jenkins使用tomcat部署項目

一、安裝tomcattomcat本來應該是第3臺服務器的&#xff08;第一臺&#xff1a;gitlab&#xff0c;第二臺&#xff1a;jenkins&#xff0c;第三臺&#xff1a;tomcat&#xff09;&#xff0c;我這里資源有限&#xff0c;就把tomcat安裝jenkins服務器了。#解壓tocmcat [rootbogon…

華為eNSP防火墻實驗(包含詳細步驟)

拓撲圖 這里要用的防火墻是 &#xff0c; 需要導入 目錄 防火墻配置1&#xff08;啟動圖形化界面&#xff09; cloud配置 緩沖區服務器配置 防火墻配置2&#xff08;各端口的ip地址&#xff09; 外部路由器配置 本地路由器配置 防火墻配置3&#xff08;配置安全策略&a…

Linux/Unix線程及其同步(create、wait、exit、互斥鎖、條件變量、多線程)

線程 文章目錄線程I 線程基本概念1、為什么引入線程2、PthreadsII 線程基本操作1、創建線程2、終止線程3、線程ID4、連接已終止線程5、線程基本操作示例III 通過互斥量同步線程1、基本概念2、互斥量&#xff08;Mutex&#xff09;3、靜態分配互斥量4、互斥量鎖定與解鎖5、互斥量…

vue3 el-table 行數據沾滿格 取消自動換行

在 Vue.js 使用 Element UI 或 Element Plus 的 <el-table> 組件時&#xff0c;如果你希望其中的單元格內容不自動換行&#xff0c;可以通過設置 CSS 樣式來實現。這里有幾種方法可以做到這一點&#xff1a;方法1&#xff1a;使用 CSS 樣式你可以直接在 <el-table-col…

操作系統級TCP性能優化:高并發場景下的內核參數調優實踐

在高并發網絡場景中&#xff0c;操作系統內核的TCP/IP協議棧配置對系統性能起著決定性作用。本文聚焦操作系統層面&#xff0c;深入解析內核參數調優策略&#xff0c;幫助讀者構建穩定高效的網絡通信架構。 一、連接管理參數優化&#xff1a;從三次握手到隊列控制 1.1 監聽隊列…

基于物聯網的智能交通燈控制系統設計

標題:基于物聯網的智能交通燈控制系統設計內容:1.摘要 摘要&#xff1a;隨著城市交通流量的不斷增加&#xff0c;傳統交通燈控制方式已難以滿足高效交通管理的需求。本研究的目的是設計一種基于物聯網的智能交通燈控制系統。方法上&#xff0c;該系統利用物聯網技術&#xff0c…

nodejs中使用UDP傳遞信息

什么是UDP?UDP&#xff08;User Datagram Protocol&#xff0c;用戶數據報協議&#xff09;是一種無連接的網絡傳輸協議&#xff0c;位于 OSI 模型的傳輸層&#xff08;第四層&#xff09;&#xff0c;與 TCP&#xff08;傳輸控制協議&#xff09;同為互聯網的核心協議之一。它…

App Trace功能實戰:一鍵拉起應用實踐

一、App Trace功能概述App Trace是一種用于監控和分析應用啟動流程的技術&#xff0c;它可以幫助開發者&#xff1a;追蹤應用冷啟動/熱啟動的全過程分析啟動過程中的性能瓶頸優化應用啟動速度實現應用間的快速拉起二、一鍵拉起應用的實現方案1. Android平臺實現方案1&#xff1…

Flink ClickHouse 連接器數據讀取源碼深度解析

一、引言 在大數據處理流程中&#xff0c;從存儲系統中高效讀取數據是進行后續分析的基礎。Flink ClickHouse 連接器為我們提供了從 ClickHouse 數據庫讀取數據的能力&#xff0c;使得我們可以將 ClickHouse 中存儲的海量數據引入到 Flink 流處理或批處理作業中進行進一步的分析…

云原生技術與應用-容器技術技術入門與Docker環境部署

目錄 一.Docker概述 1.什么是Docker 2.Docker的優勢 3.Docker的應用場景 4.Docker核心概念 二.Docker安裝 1.本安裝方式使用阿里的軟件倉庫 2.Docker鏡像操作 3.Docker容器操作 一.Docker概述 因為 Docker 輕便、快速的特性&#xff0c;可以使應用達到快速迭代的目的。每次小…

第2章,[標簽 Win32] :匈牙利標記法

專欄導航 上一篇&#xff1a;第2章&#xff0c;[標簽 Win32] &#xff1a;Windows 數據類型 回到目錄 下一篇&#xff1a;第2章&#xff0c;[標簽 Win32] &#xff1a;兼容 ASCII 字符與寬字符的 Windows 函數調用 本節前言 在初學編程的時候&#xff0c;我們給變量命令的…

從深度學習的角度看自動駕駛

從深度學習的角度看自動駕駛 A Survey of Autonomous Driving from a Deep Learning Perspective 我們探討了深度學習在自主駕駛中的關鍵模塊&#xff0c;例如感知&#xff0c;預測&#xff0c;規劃以及控制。我們研究了自主系統的體系結構&#xff0c;分析了如何從模塊化&…

java+vue+SpringBoo基于Hadoop的物品租賃系統(程序+數據庫+報告+部署教程+答辯指導)

源代碼數據庫LW文檔&#xff08;1萬字以上&#xff09;開題報告答辯稿ppt部署教程代碼講解代碼時間修改工具 技術實現 開發語言&#xff1a;后端&#xff1a;Java 前端&#xff1a;vue框架&#xff1a;springboot數據庫&#xff1a;mysql 開發工具 JDK版本&#xff1a;JDK1.8 數…