当前位置: 首页 > news >正文

【蓝桥集训】第五天——递推

作者:指针不指南吗
专栏:Acwing 蓝桥集训每日一题

🐾或许会很慢,但是不可以停下来🐾

文章目录

  • 1.砖块

递推算法是一种简单的算法,通过已知条件,利用特定关系得出中间推论,逐步递推,直到得到结果为止

1.砖块

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

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

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

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

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

输入格式

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

每组数据第一行包含一个整数 n。

第二行包含一个长度为 n 的字符串 s。其中的每个字符都是 WB,如果第 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
  • 思路

    • 最后的结果可以分成两种情况:全白或者是全黑;

    • 我们操作的位置只有 n-1 种,所以不用考虑 3n 的情况;

    • 每个位置反转两次,相当于没有反转,所以我们只要考虑每个位置要不要操作就可以(0或者1);

    • 如果 i 位置和我们想要的颜色不同,则操作,否则,不,所以说每个位置的操作都是确定的;

    把每一个位置递推一下,到最后一个

    • 最后一个在前一个位置操作或者是没有操作过后,不能操作:判断一下,如果与第一个相同,则说明符合题意。
  • 代码实现

    #include<bits/stdc++.h>
    using namespace std;int n;void update(char &a)
    {if(a=='W') a='B';else a='W';
    }bool check(string s,char x)
    {vector<int> ans; //数组 ans 存操作的位置 for(int i=0;i+1<n;i++){  if(s[i]!=x){  //如果不是我们想要的,则更新update(s[i]);update(s[i+1]);ans.push_back(i);  //把操作位置放入数组中}}if(s.back()!=s[0]) return false;  //最后一个无法改变,如果与前面不同,则不能实现cout<<ans.size()<<endl;for(auto i:ans) cout<<i+1<<' ';  //输出结果return true;
    }int main()
    {int T;cin>>T;while(T--){string s;cin>>n>>s;if(!check(s,'W')&&!check(s,'B')) puts("-1");  //如果全白或者是全黑都不可以,则输出 -1;} return 0;} 
    

Alt

http://www.lryc.cn/news/14695.html

相关文章:

  • qnx的网络知识记录
  • 【Vue/基础知识】Vue基础知识(一)
  • Iceberg实战踩坑指南
  • 预告|2月25日 第四届OpenI/O 启智开发者大会昇腾人工智能应用专场邀您共启数字未来!
  • UnRaid虚拟机安装OpenWrt软路由
  • 开发日记-lombok
  • Web3中文|2023年zk赛道爆发,即将推出的Polygon zkEVM有多重要?
  • 【自然语言处理】主题建模:Top2Vec(理论篇)
  • 【ICLR 2022】重新思考点云中的网络设计和局部几何:一个简单的残差MLP框架
  • 《MySQL学习》 count(*) 原理
  • 时间序列数据预测的类型
  • sk_buff结构体成员变量说明
  • springbatch设置throttle-limit参数不生效
  • 用 tensorflow.js 做了一个动漫分类的功能(一)
  • 看完这篇Vue-element-admin,跟面试官聊骚没问题
  • 2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A(5)
  • 基于Java+SpringBoot+Vue+Uniapp前后端分离商城系统设计与实现
  • 新建ES别名 添加别名 切换别名
  • MySQL —— 内外连接
  • EXCEL中文本和数字的相互转换方法
  • React源码分析6-hooks源码
  • Windows10神州网信政府版麦克风、摄像头的使用
  • 微机原理学习总结0:前言
  • LeetCode 1828. 统计一个圆中点的数目
  • Spring Boot + Vue3 前后端分离 实战 wiki 知识库系统<一>---Spring Boot项目搭建
  • leetcode 11~20 学习经历
  • LeetCode 双周赛 98,脑筋急转弯转不过来!
  • 函数的栈帧的创建和销毁
  • python filtermapreducezip
  • Centos7搭建hadoop3.3.4分布式集群