Acwing---3777. 磚塊

磚塊

  • 1.題目
  • 2.基本思想
  • 3.代碼實現

1.題目

n 個磚塊排成一排,從左到右編號依次為 1~n。

每個磚塊要么是黑色的,要么是白色的。

現在你可以進行以下操作若干次(可以是 0 次):

選擇兩個相鄰的磚塊,反轉它們的顏色。(黑變白,白變黑)

你的目標是通過不超過 3n 次操作,將所有磚塊的顏色變得一致。

輸入格式
第一行包含整數 T T T,表示共有 T T T 組測試數據。

每組數據第一行包含一個整數 n n n

第二行包含一個長度為 n n n 的字符串 s。其中的每個字符都是 W B,如果第 i 個字符是 W,則表示第 i 號磚塊是白色的,如果第 i 個字符是 B,則表示第 i 個磚塊是黑色的。

輸出格式
每組數據,如果無解則輸出一行 ?1。

否則,首先輸出一行 k,表示需要的操作次數。

如果 k>0,則還需再輸出一行 k 個整數,p1,p2,…,pk。其中 pi 示第 i 次操作,選中的磚塊為 pi 和 pi+1 號磚塊。

如果方案不唯一,則輸出任意合理方案即可。

數據范圍
1≤T≤10,

2≤n≤200。

輸入樣例1:
4
8
BWWWWWWB
4
BWBB
5
WWWWW
3
BWB

輸出樣例1:

3
6 2 4
-1
0
2
2 1

2.基本思想

思路:貪心

  • 最終的字符串,要么全為白色,要么全為黑色。
  • 以目標全為白色為例,遍歷字符串的前 n?1個磚塊,每遇到一個黑色磚塊,就對其進行一次操作,將該磚塊和下一個磚塊變為另一種顏色,并將結果記錄到數組中。如果發現最后一個磚塊不為白色,那說明無法將磚塊全部轉化為白色;黑色同理。
  • 若最終全轉化為白色和全轉化為黑色均不可行,則輸出 ?1,否則輸出一種可行的方案即可。

3.代碼實現

import java.util.ArrayList;
import java.util.Scanner;public class Main {static Scanner sc = new Scanner(System.in);static char[]ss;static void update(int i){if (ss[i]=='W'){ss[i] = 'B';}else {ss[i] = 'W';}}static boolean check(String temp ,char c) {ArrayList<Integer> res = new ArrayList<>();ss = temp.toCharArray();int n = ss.length;for (int i = 0; i + 1 < n; i++) {if (ss[i] != c) {update(i);update(i+1);res.add(i);}}if (ss[ss.length-1]!=ss[0]){return false;}System.out.println(res.size());for (Integer re : res) {System.out.print(re+1 +" ");}if (res.size()!=0){System.out.println();}return true;}public static void main(String[] args) {int t = sc.nextInt();while (t-- > 0) {int n = sc.nextInt();String temp = sc.next();if (!check(temp, 'W') && !check(temp, 'B')) {System.out.println("-1");}}}
}

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

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

相關文章

STL——stack

目錄 stack stack都有哪些接口 模擬實現一個stack stack 1. stack是一種容器適配器&#xff0c;專門用在具有后進先出操作的上下文環境中&#xff0c;其刪除只能從容器的一端進行元素的插入與提取操作。 2. stack是作為容器適配器被實現的&#xff0c;容器適配器即…

數據分析-Pandas數據的畫圖設置

數據分析-Pandas數據的畫圖設置 數據分析和處理中&#xff0c;難免會遇到各種數據&#xff0c;那么數據呈現怎樣的規律呢&#xff1f;不管金融數據&#xff0c;風控數據&#xff0c;營銷數據等等&#xff0c;莫不如此。如何通過圖示展示數據的規律&#xff1f; 數據表&#x…

春招!啟動了

大家好&#xff0c;我是洋子。今年的春招很多企業已經開始招聘了&#xff0c;像美團今年繼續發力&#xff0c;24屆春招以及25屆暑期轉正實習一共招聘4000人。另外&#xff0c;阿里&#xff0c;京東&#xff0c;順豐等公司也已經開始春招&#xff0c;可以說招聘的號角已經正式吹…

GO語言學習筆記(與Java的比較學習)(十)

錯誤處理與測試 Go 沒有像 Java 和 .NET 那樣的 try/catch 異常機制&#xff1a;不能執行拋異常操作。但是有一套 defer-panic-and-recover 機制 錯誤處理 Go 有一個預先定義的 error 接口類型 type error interface {Error() string } errors 包中有一個 errorString 結構…

十二、類與聲明

類與聲明 什么是類&#xff1f; 前情總結 前面22講的課基本上就做了兩件事 學習C#的基本元素學習類的成員 析構函數&#xff1a; 當對象不再被引用的時候&#xff0c;就會被垃圾回收器gc&#xff0c;回收。而收回的過程當中&#xff0c;如果需要做什么事情&#xff0c;就放在…

遠程調用--Http Interface

遠程調用--Http Interface 前言1、導入依賴2、定義接口3 創建代理&測試4、創建成配置變量 前言 這個功能是spring boot6提供的新功能&#xff0c;spring允許我們通過自定義接口的方式&#xff0c;給任意位置發送http請求&#xff0c;實現遠程調用&#xff0c;可以用來簡化…

已解決org.springframework.dao.DataRetrievalFailureException數據檢索失敗異常的正確解決方法,親測有效!!!

已解決org.springframework.dao.DataRetrievalFailureException數據檢索失敗異常的正確解決方法&#xff0c;親測有效&#xff01;&#xff01;&#xff01; 目錄 問題分析 出現問題的場景 報錯原因 解決思路 解決方法 總結 在使用Spring Framework進行數據庫操作時&…

關于硅金屬電阻器?

EAK金屬硅電阻器類似于陶瓷復合電阻器&#xff0c;在脈沖負載方面具有優勢&#xff0c;需要高峰值功率或高電壓與低電感&#xff08;如預充電電路&#xff09;的組合。硅金屬電阻器具有更高的連續額定溫度&#xff0c;為 350C&#xff0c;而陶瓷電阻器為 250C。這種擴展的溫度范…

[藍橋杯 2023 省 B] 冶煉金屬

P9240 [藍橋杯 2023 省 B] 冶煉金屬 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 參考題解&#xff1a; #C3150——藍橋杯2023年第十四屆省賽真題-冶煉金屬(分塊)-Dotcpp編程社區 https://www.bilibili.com/video/BV1wc411x7KU/?spm_id_from333.1007.top_right_bar_windo…

RT-Thread操作系統 串口DMA接收時數據被拆分多包

一、問題現象 在使用RT Thread操作系統&#xff0c;串口DMA接收數據時&#xff0c;通過log打印發現&#xff0c;例如GPS NEMA數據一包數據量較大或者時&#xff0c;接收到的數據被拆分多包處理&#xff1b; 二、問題解決方案 修改DMA驅動程序 在drivers/drv_usart.c中屏蔽如…

板子合集1.0

版權聲明&#xff1a;本文為博主原創文章&#xff0c;遵循 CC 4.0 BY-SA 版權協議&#xff0c;轉載請附上原文出處鏈接和本聲明。 原文鏈接&#xff1a;https://blog.csdn.net/JK01WYX/ 文章目錄 1.快速冪板子2.gcd得最大公約數3.堆優化的dijkstra板子4.線段樹1板子 區間加線段…

中綴表達式轉換逆波蘭式(后綴表達式)

算法思路來自于王道的數據結構 #include <iostream> #include <stack> #include <map>using namespace std; string eq; stack<char> op; string rst ""; map<char, int> dict;// 獲取優先級 int getPrio(char op) {if (op )return …

【Dubbo專欄 01 】深入探索:dubbo的架構是什么?

文章目錄 Dubbo&#xff1a;深入解析分布式服務框架的核心概念與實現01 Dubbo簡介02 Dubbo核心概念2.1 服務提供者&#xff08;Provider&#xff09;2.2 服務消費者&#xff08;Consumer&#xff09;2.3 注冊中心&#xff08;Registry&#xff09;2.4 負載均衡&#xff08;Load…

如何對用OpenCV開發的API進行測試 (Google Test 版本)

如何對用OpenCV開發的API進行測試 &#xff08;Google Test 版本&#xff09; 如何對用OpenCV開發的API進行測試斷言介紹斷言基礎的斷言數值比較字符串比較 如何對用OpenCV開發的API進行測試 假設你想測試一個使用OpenCV開發的圖像處理API&#xff0c;例如一個圖像濾波函數。以…

SWC Runnable

runnable概念 runnable是編寫應用程序行為邏輯的 SWC 的一部分。Runnable 類似于 C 中的函數,類似RTOS中的task,程序運行的實體,swc的靈魂。在 AUTOSAR 中,我們在配置期間在 SWC 中創建 Runnable,并且 在 SWC 的相應源文件中生成Runnable 或函數骨架。骨架函數的名稱與我…

【硬件工程師面經整理15_低通/高通/帶通濾波器】

低通/高通/帶通濾波器 1.1 低通濾波器1.2 高通濾波器1.3 帶通濾波器 1.1 低通濾波器 【定義】電感阻止高頻信號通過而允許低頻信號通過&#xff0c;電容的特性卻相反。信號能夠通過電感的濾波器、或者通過電容連接到地的濾波器對于低頻信號的衰減要比高頻信號小&#xff0c;稱…

第二篇【傳奇開心果系列】Python的自動化辦公庫技術點案例示例:深度解讀Pandas金融數據分析

傳奇開心果博文系列 系列博文目錄Python的自動化辦公庫技術點案例示例系列 博文目錄前言一、Pandas 在金融數據分析中的常見用途和功能介紹二、金融數據清洗和準備示例代碼三、金融數據索引和選擇示例代碼四、金融數據時間序列分析示例代碼五、金融數據可視化示例代碼六、金融數…

軟考高級:DNS欺騙相關知識和例題

一、AI 解析 DNS欺騙&#xff0c;又稱DNS緩存投毒&#xff0c;是一種網絡攻擊技術。攻擊者通過篡改DNS服務器的緩存數據&#xff0c;使得DNS查詢的結果指向一個惡意的IP地址&#xff0c;從而引導用戶訪問到釣魚網站或者惡意軟件下載頁面&#xff0c;對用戶的信息安全造成威脅。…

后臺組件-IO定義

<groupId>org.qlm</groupId><artifactId>qlm-io</artifactId><version>1.0-SNAPSHOT</version> 該組件定義了前端和后臺微服務直接通訊結構以及返回值定義。 RequestInfo&#xff1a;請求結構 ResponseResult&#xff1a;非分頁的返回結…

最新版風車IM通訊iosapph5三端源碼及視頻教程

最新版風車IM通訊iosapph5三端源碼及視頻教程 1.寶塔環境如下: Nginx 1.20 Tomcat 8 MySQL 8.0 Redis 7 2.放行端口如下&#xff1a; 666 6600 6700 7000&#xff08;用作前端&#xff09; 7001&#xff08;用作后端&#xff09; 3.寶塔數據庫添加數據庫旁邊有個ro…