文章目录

  • 一、题目
    • 1、原题链接
    • 2、题目描述
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解
  • 三、知识风暴
    • 递推

一、题目

1、原题链接

3777. 砖块

2、题目描述

n 个砖块排成一排,从左到右编号依次为 1∼n。

每个砖块要么是黑色的,要么是白色的。

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

选择两个相邻的砖块,反转它们的颜色。(黑变白,白变黑

你的目标是通过不超过 3n 次操作,将所有砖块的颜色变得一致

输入格式

第一行包含整数 T,表示共有 T 组测试数据。

每组数据第一行包含一个整数 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
输入样例

4
8
BWWWWWWB
4
BWBB
5
WWWWW
3
BWB

输出样例

3
6 2 4
-1
0
2
2 1

二、解题报告

1、思路分析

思路来源:y总每日一题b站视频链接
y总yyds

(1)最终结果只有两种,全黑和全白。而每个位置只会操作0或1次,如果操作多次的话,操作结果必然和操作0次或1次中其中一个结果相同。并且每个砖块的颜色只与其被操作的次数有关,而与操作的顺序无关
(2)假设我们从前往后依次操作,来使所有砖块颜色相同,即依次遍历每个砖块,如果与预期颜色不同,则操作它和它后面一个砖块使该位置砖块的颜色满足条件,直到遍历到最后一个砖块,它的砖块颜色无法再进行改变(因为前面的砖块已经满足条件,若要改变砖块颜色只能改变它和它后面与它相邻的砖块的颜色,而它是最后一个砖块,无法再进行操作),所以如果最后一个砖块的颜色符合预期,则可以使所有砖块颜色相同;否则不能。
(3)模拟此过程,统计满足条件的结果数,输出即可。

2、时间复杂度

每次判断是否可以将砖块统一成黑色或白色的时间复杂度为O(n)

3、代码详解

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int t;
int n;
string s;
//判断砖块是否能统一成某一种颜色(全黑或全白)
bool check(char x){vector<int> ans;     //存储每次操作string tmp=s;        //因为要判断两次(全黑和全白)所以不能在原串进行操作for(int i=0;i<n-1;i++){if(tmp[i]!=x){ans.push_back(i);       //将当前位置记录到需要改变的答案序列中//改变当前位置和其后边相邻位置的颜色if(tmp[i]=='B') tmp[i]='W';else tmp[i]='B';if(tmp[i+1]=='B') tmp[i+1]='W';else tmp[i+1]='B';}}if(tmp.back()!=x) return false;   //如果最后一个位置和预期颜色不同,则无法使全部砖块颜色一致,返回false//如果存在就按题目要求输出cout<<ans.size()<<endl;for(int i=0;i<ans.size();i++){cout<<ans[i]+1<<' ';}if(ans.size()) cout<<endl;return true;
}
int main(){cin>>t;while(t--){cin>>n;cin>>s;if(!check('B')&&!check('W')) cout<<-1<<endl;   //如果全黑和全白都无法实现,则输出-1}return 0;
}

三、知识风暴

递推

递推可以解决从前面已知态可以逐步推导出后续未知态的问题。

【蓝桥杯集训·每日一题】AcWing 3777. 砖块相关推荐

  1. AcWing《蓝桥杯集训·每日一题》—— 3777 砖块

    AcWing<蓝桥杯集训·每日一题>-- 3777. 砖块 文章目录 AcWing<蓝桥杯集训·每日一题>-- 3777. 砖块 一.题目 二.解题思路 三.解题思路 本次博客 ...

  2. 蓝桥杯集训·每日一题Week1

    前缀和(Monday) AcWing 3956. 截断数组(每日一题) 思路: 首先可以预处理出前缀和.判断数组长度如果小于 333 或者前 nnn 项不是 333 的倍数,则可以直接输出 000. ...

  3. 【蓝桥杯集训·每日一题】AcWing1394. 完美牛棚

    文章目录 一.题目 1.原题链接 2.题目描述 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.知识风暴 匈牙利算法 一.题目 1.原题链接 1394. 完美牛棚 2.题目描述 农夫约翰 ...

  4. 【Scratch】青少年蓝桥杯_每日一题_2.13_碰苹果

    用心写好每一篇文章  上效果图 一.背景信息 本题目是Scratch编程问题,出现在2019年12月15日的STEMA考试和蓝桥杯地区选拔赛中.此题难度系数为3,在整个试卷中属于相对简单的题目. 二. ...

  5. 【Scratch】青少年蓝桥杯_每日一题_3.23_骰子

    用心写好每一篇文章 上效果图 一.背景信息 本题目是Scratch编程问题,此题出现在2020年01月12日的蓝桥杯地区选拔赛和STEMA考试中. 二.编程实现 1)绘制两个骰子角色,每个骰子角色都有 ...

  6. 【Scratch】青少年蓝桥杯_每日一题_2.23_小猫来回走

    用心写好每一篇文章 上效果图 一.背景信息 本题目是Scratch编程问题﹐出现在第十届蓝桥杯地区选拔赛中.此题属于简单题目,主要考察思维清晰与编程正常情况下,在考试中完成此题目的时间应该在10分钟以 ...

  7. 【Scratch】青少年蓝桥杯_每日一题_2.17_城堡

    用心写好每一篇文章 上效果图 一.背景信息 本题目是Scratch编程问题,出现在第十届蓝桥杯地区选拔赛中.此题主要考察Scratch编程中的角色外观和坐标设置基本知识. 二.编程实现 小猫从坐标点( ...

  8. 【Scratch】青少年蓝桥杯_每日一题_2.01_画五角星

    用心写好每一篇文章 上效果图 一.背景信息 本题目是Scratch编程问题﹐此题出现在2020年01月12日的蓝桥杯地区选拔赛和STEMA考试中 二.编程实现 用鼠标点击不同的位置,在鼠标点击的位置画 ...

  9. 蓝桥杯大赛— —每日一题(12、城堡问题)

    [题目描述] = Wall | = No wall = No wall 图1是一个城堡的地形图.请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大.城堡被分割成m*n(m≤50,n≤50)个方 ...

最新文章

  1. React Native学习(七)—— FlatList实现横向滑动列表效果
  2. 【linux】查看Linux操作系统版本、内核、CPU和内存信息
  3. DL:LinearNN(numpy自定义的) solve XOR problem
  4. 头条45K的推荐算法工程师,需要具备怎样的技能
  5. OpenCV尺寸调整函数resize
  6. 60 分钟极速入门 PyTorch
  7. 计算机培训开场语,辅导班家长会主持词开场白
  8. 人脸识别sdk_开发实录:免费人脸识别SDK实现人证比对全过程
  9. Microsoft.NET Pet Shop 4.0各个模块之间的联系
  10. 【以太坊开发】发币指南--进阶篇
  11. 微信小程序:动画效果集合
  12. pycharm免费版下载压缩包(有需要的自取)
  13. 在局域网被网络管理员限制了远程连接的默认端口3389,导致无法远程桌面连接
  14. 考题篇(6.2) 05 ❀ FortiManager ❀ Fortinet 网络安全专家 NSE 5
  15. matlab 坐标轴刻度朝外_Matlab 绘图 坐标轴 刻度
  16. C++循环结构实例:估算e值:计算e=1+(1/1!)+(1/2!)+…的近似值,1/n!小于10^(-7)时停止计算
  17. C++中的swap(交换函数)
  18. 李建忠设计模式——桥模式
  19. rsem比对_链特异性参数设不对 结果全是错的
  20. UE4(虚幻4)基础:静态网格模型碰撞设置(三种方法)

热门文章

  1. 【LaTeX】表格调整行高、列宽、合并显示等操作
  2. Python 他来了,他来了!
  3. 发票查验一直网络异常、无法显示验证码、点击查验没反应怎么办?
  4. python六大数据类型详解
  5. MogaFX—ServiceNow的Bill McDermott正在关注货币汇率
  6. [Web端接入经验分享] 腾讯云即时通信TIM、实时音视频TRTC
  7. 可视化设计,类Excel的快速开发平台
  8. Appscan安全测试
  9. SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?
  10. 如何爬取商品详情页中的信息