「邏輯推理」AtCoder AT_abc401_d D - Logical Filling

前言

這次的 D 題出得很好,不僅融合了數學邏輯推理的知識,還有很多細節值得反復思考。雖然通過人數遠高于 E,但是通過率甚至不到 60%,可見這些細節正是出題人的側重點。

題目大意

給定一個長度為 N N N 的字符串 S S S,由 o. 組成。現在一些位置的字符不明確,用 ? 表示,可以替換成 o. 中的任意一個。要求目標串(所有位置都被替換之后)同時滿足以下兩個條件:

  • S S S 中有恰好 K K Ko
  • 任意兩個 o 不相鄰。

現在要填這個串,但是因為條件有限,只能完成部分內容。輸出所有答案唯一(可以確定)的位置的字符,其他位置仍用 ? 表示。

思路

為了簡化問題,我們要先從最簡單的位置入手,再解決其他位置。讓我們來分析一下都有哪些情況是確定的:

描述結果備注
一個問號與 o 相鄰這里填 .
o 的數量已經達到 K K K所有問號處填 .
o 的數量與問號的數量之和恰好為 K K K所有問號處填 o
出現連著 2 ? M + 1 2\cdot M+1 2?M+1 個問號,且這段里必須填 M + 1 M+1 M+1o 1這段形如 o.o.o.···.o本人賽時曾忽略

然后我們執行這些操作無限次,直到無法更新任何地方(執行了之后該輪沒有任何格子被更新)為止。

代碼

賽時 AC 提交記錄:Submission #64790876。

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;int n, k;
string s;
int t[200010];int main()
{cin >> n >> k >> s;s = " " + s + " ";int upd = 0;do{upd = 0;for (int i = 1; i <= n; i++)if (s[i] == '?'){if (i != 1 && s[i - 1] == 'o')s[i] = '.', upd++;if (i != n && s[i + 1] == 'o')s[i] = '.', upd++;}int cnt1 = 0, cnt2 = 0;for (int i = 1; i <= n; i++){if (s[i] == 'o') cnt1++;if (s[i] == '?') cnt2++;}if (cnt1 + cnt2 == k){for (int i = 1; i <= n; i++)if (s[i] == '?')s[i] = 'o', upd++;
//			break;}else if (cnt1 == k){for (int i = 1; i <= n; i++)if (s[i] == '?')s[i] = '.';
//			break;}for (int i = 1; i <= n; i++)if (s[i] == '?'){if (s[i - 1] == 'o')s[i] = '.', upd++;if (s[i + 1] == 'o')s[i] = '.', upd++;}int cnt = 0, c = 0, flag = 1;for (int i = 1; i <= n; i++)t[i] = 0;for (int i = 1; i <= n; i++){if (s[i] == '?')t[i] = t[i - 1] + 1;else{cnt += (t[i - 1] + 1) / 2;t[i] = 0;}}cnt += (t[n] + 1) / 2;for (int i = n; i >= 1; i--)if (t[i] && t[i + 1])t[i] = t[i + 1];if (cnt + cnt1 == k){for (int i = 1; i <= n; i++){
//				cout << t[i] << " " << i << endl;if (t[i] % 2 == 0) continue;if (s[i] == '?' && s[i - 1] != 'o')s[i] = 'o', upd++;else if (s[i] == '?')s[i] = '.', upd++;}
//			break;}} while (upd != 0);for (int i = 1; i <= n; i++)cout << s[i];return 0;
}
/*
7 3
?o????.
---
10 5
?????.????
*/

  1. 如何判定這種情況?當前僅當數組中每一段連續的問號(長度為 L L L)都填 ? L 2 ? \left \lceil \frac{L}{2} \right \rceil ?2L??oo 的數量恰好為 K K K。 ??

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

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

相關文章

騰訊后臺開發 一面

一、手撕 合并升序鏈表 合并兩個排序的鏈表_牛客題霸_牛客網 順時針翻轉矩陣 順時針旋轉矩陣_牛客題霸_牛客網 二、八股 1、靜態變量和實例變量 public class House {public static String buildDate "2024-10-27"; // 靜態變量public String color; // 實…

Unity 動畫

Apply Root Motion 勾選的話就會使用動畫片段自帶的位移 Update Mode &#xff08;動畫重新計算骨骼位置轉向縮放的數值&#xff09;&#xff1a; Normal &#xff1a; 隨Update走&#xff0c;每次Update都計算Animate Physics &#xff1a;與 fixed Update() 同步&#xff0…

NDT和ICP構建點云地圖 |【點云建圖、Ubuntu、ROS】

### 本博客記錄學習NDT&#xff0c;ICP構建點云地圖的實驗過程&#xff0c;參考的以下兩篇博客&#xff1a; 無人駕駛汽車系統入門&#xff08;十三&#xff09;——正態分布變換&#xff08;NDT&#xff09;配準與無人車定位_settransformationepsilon-CSDN博客 PCL中點云配…

基于HTML + jQuery + Bootstrap 4實現(Web)地鐵票價信息生成系統

地鐵票價信息表生成系統 1. 需求分析 1.1 背景 地鐵已經成為大多數人出行的首選,北京地鐵有多條運營線路, 截至 2019 年 12 月,北京市軌道交通路網運營線路達 23 條、總里程 699.3 公里、車站 405 座。2019 年,北京地鐵年乘客量達到 45.3 億人次,日均客流為 1241.1 萬人次…

EtherNet/IP 轉 Modbus 協議網關

一、產品概述 1.1 產品用途 SG-EIP-MOD-210 網關可以實現將 Modbus 接口設備連接到 EtherNet/IP 網 絡中。用戶不需要了解具體的 Modbus 和 EtherNet/IP 協議即可實現將 Modbus 設 備掛載到 EtherNet/IP 接口的 PLC 上&#xff0c;并和 Modbus 設備進行數…

PostgreSQL:邏輯復制與物理復制

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

騰訊云COS與ZKmall 開源商城的存儲集成方案

ZKmall 開源商城與騰訊云對象存儲&#xff08;COS&#xff09;的集成&#xff0c;可通過云端資源托管、自動化數據同步、高性能存儲架構實現本地存儲負載降低與訪問效率提升。以下是基于搜索結果的集成路徑與核心優化點&#xff1a; 一、存儲架構升級&#xff1a;本地與云端協同…

HTML — 浮動

浮動 HTML浮動&#xff08;Float&#xff09;是一種CSS布局技術&#xff0c;通過float: left或float: right使元素脫離常規文檔流并向左/右對齊&#xff0c;常用于圖文混排或橫向排列內容。浮動元素會緊貼父容器或相鄰浮動元素的邊緣&#xff0c;但脫離文檔流后可能導致父容器高…

【軟件測試學習day1】軟件測試概念

前言 本篇學習&#xff0c;測試相關基礎概念、常見的開發模型測和測試模型&#xff0c;搞懂4個問題&#xff1a; 什么是需求什么是 bug什么是測試用例開發模型和測試模型 目錄 1. 什么是需求 1.1 為什么要有需求 1.2 測試人員眼里的需求 1.3 如何深入了解需求 2. 測試用例…

Flutter常用組件實踐

Flutter常用組件實踐 1、MaterialApp 和 Center(組件居中)2、Scaffold3、Container(容器)4、BoxDecoration(裝飾器)5、Column(縱向布局)及Icon(圖標)6、Column/Row(橫向/橫向布局)+CloseButton/BackButton/IconButton(簡單按鈕)7、Expanded和Flexible8、Stack和Po…

劉火良FreeRTOS內核實現與應用學習之7——任務延時列表

在《劉火良FreeRTOS內核實現與應用學習之6——多優先級》的基礎上&#xff1a;關鍵是添加了全局變量&#xff1a;xNextTaskUnblockTime &#xff0c;與延時列表&#xff08;xDelayedTaskList1、xDelayedTaskList2&#xff09;來高效率的實現延時。 以前需要在掃描就緒列表中所…

圖像預處理-插值方法

一.插值方法 當我們對圖像進行縮放或旋轉等操作時&#xff0c;需要在新的像素位置上計算出對應的像素值。 而插值算法的作用就是根據已知的像素值來推測未知位置的像素值。 1.1 最近鄰插值 CV2.INTER_NEAREST 其為 warpAffine() 函數的參數 flags 的其一&#xff0c;表示最近…

智能配電保護:公共建筑安全的新 “防火墻”

安科瑞劉鴻鵬 摘要 隨著城市建筑體量的不斷增長和電氣設備的廣泛使用&#xff0c;現代建筑大樓的用電安全問題日益突出。傳統配電方式面臨監測盲區多、響應滯后、火災隱患難發現等問題。為提升建筑電氣系統的安全性和智能化水平&#xff0c;智慧用電系統應運而生。本文結合安…

如何解決DDoS攻擊問題 ?—專業解決方案深度分析

本文深入解析DDoS攻擊面臨的挑戰與解決策略&#xff0c;提供了一系列防御技術和實踐建議&#xff0c;幫助企業加強其網絡安全架構&#xff0c;有效防御DDoS攻擊。從攻擊的識別、防范措施到應急響應&#xff0c;為網絡安全工作者提供了詳細的操作指引。 DDoS攻擊概覽&#xff1a…

構建靈活的接口抽象層:支持多種后端數據存取的實戰指南

構建靈活的接口抽象層:支持多種后端數據存取的實戰指南 引言 在現代軟件開發中,數據存取成為業務邏輯的核心組成部分。然而,由于后端數據存儲方式的多樣性(如關系型數據庫、NoSQL數據庫和文件存儲),如何設計一套能夠適配多種后端數據存取的接口抽象層,成為技術團隊關注…

OpenCV 圖形API(23)圖像和通道合成

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 1.算法描述 在OpenCV的G-API模塊中&#xff0c;圖像和通道合成&#xff08;composition&#xff09;函數允許用戶對圖像進行復雜的操作&#xff0c;如合并…

帝國cms導航淘客新聞下載多功能網站源碼 二次元風格自適應附教程

一、本模板使用帝國cms7.5 utf8版本&#xff0c;二次元導航新聞下載工具淘客自適應響應式帝國cms模板。 1、網站后臺有3個系統模型&#xff0c;新聞系統模型&#xff0c;下載系統模型&#xff0c;導航系統模型&#xff0c;商城系統模型&#xff0c;可以根據自己的需求不同&…

本地部署大模型(ollama模式)

分享記錄一下本地部署大模型步驟。 大模型應用部署可以選擇 ollama 或者 LM Studio。本文介紹ollama本地部署 ollama官網為&#xff1a;https://ollama.com/ 進入官網&#xff0c;下載ollama。 ollama是一個模型管理工具和平臺&#xff0c;它提供了很多國內外常見的模型&…

C# virtual 和 abstract 詳解

簡介 在 C# 中&#xff0c;virtual 和 abstract 關鍵字都用于面向對象編程中的繼承和多態&#xff0c;它們主要用于方法、屬性和事件的定義&#xff0c;但在用法上存在一些重要的區別。 virtual 關鍵字 virtual 表示可重寫的方法&#xff0c;但可以提供默認實現&#xff0c;…

自動駕駛的數據集以及yolov8和yolop

項目背景 網絡全部是分割了沒有檢測。 自動駕駛的車道線和可行駛區域在數據集中的表示 自動駕駛系統中的車道線和可行駛區域的表示方式主要有以下幾種&#xff1a; 基于幾何模型&#xff1a;使用幾何模型來描述車道線和可行駛區域的形狀和位置&#xff0c;例如直線、曲線、多…