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.mzph.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…