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

沈阳市城乡建设委员会信息网站长尾关键词爱站

沈阳市城乡建设委员会信息网站,长尾关键词爱站,初中电脑做网站的软件,0元玩手游平台AcWing《蓝桥杯集训每日一题》—— 3777. 砖块 文章目录AcWing《蓝桥杯集训每日一题》—— 3777. 砖块一、题目二、解题思路三、解题思路本次博客我是通过Notion软件写的,转md文件可能不太美观,大家可以去我的博客中查看:北天的 BLOG&#xf…

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

文章目录

  • AcWing《蓝桥杯集训·每日一题》—— 3777. 砖块
  • 一、题目
  • 二、解题思路
  • 三、解题思路

本次博客我是通过Notion软件写的,转md文件可能不太美观,大家可以去我的博客中查看:北天的 BLOG,持续更新中,另外这是我创建的编程学习小组频道,想一起学习的朋友可以一起!!!

一、题目

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

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

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

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

输入格式

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

每组数据第一行包含一个整数 nnn

第二行包含一个长度为 nnn 的字符串 sss。其中的每个字符都是 W 或 B,如果第 iii 个字符是 W,则表示第 iii 号砖块是白色的,如果第 iii 个字符是 B,则表示第 iii 个砖块是黑色的。

输出格式

每组数据,如果无解则输出一行 −1

否则,首先输出一行 kkk,表示需要的操作次数。

如果 k>0k>0k>0,则还需再输出一行 kkk 个整数,p1,p2,…,pkp1,p2,…,pkp1,p2,,pk。其中 pip_ipi 表示第 iii 次操作,选中的砖块为 pip_ipi 和 pi+1p_i+1pi+1 号砖块。

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

数据范围

1≤T≤101≤T≤101T10

2≤n≤2002≤n≤2002n200

输入样例:

4
8
BWWWWWWB
4
BWBB
5
WWWWW
3
BWB

输出样例:

3
6 2 4
-1
0
2
2 1

二、解题思路

这道题目需要我们实现的是对给定字符串s进行操作,使得其变成一个全为’B’或全为’W’的字符串,并输出操作次数以及具体的操作。操作规则为,如果s中’B’和’W’个数均为偶数,则不需要进行任何操作;如果’B’个数为奇数,需要对相邻的两个’B’进行操作,使其变成’W’,或者将’B’和’W’对调,使得’B’个数变为偶数,然后进行相邻的’B’操作,使其变成’W’。如果’W’个数为奇数,操作方法与’B’个数奇数的情况相似。

具体来说,我们在实现的过程是先计算’B’和’W’的个数,然后根据个数的奇偶性进行分类讨论。当’B’和’W’的个数均为偶数时,不需要操作。当其中一个为奇数时,需要对相邻的两个颜色相同的块进行操作,使其变成相反的颜色,或者将两个不同颜色的块进行对调,使得颜色个数为偶数。通过循环操作后,最终得到一个全为’B’或者全为’W’的字符串。最后输出操作次数和具体操作的序列。

三、解题思路

# 输入测试用例数量
T = int(input())
for _ in range(T):# 输入字符串长度和字符串n = int(input())s = list(input())# 统计W和B的数量w_cnt = s.count('W')b_cnt = s.count('B')# 判断是否有解if w_cnt % 2 == 1 and b_cnt % 2 == 1:print(-1) # 没有解else:res_cnt = 0 # 记录需要操作的次数res = [] # 记录操作的位置if w_cnt % 2 == 1: # W的数量为奇数,需要将一些B变成Wi = 0while i < n - 1:if s[i] == 'B' and s[i+1] == 'B': # 连续的两个B都变成Ws[i] = 'W's[i+1] = 'W'res_cnt += 1res.append(i + 1)i += 2elif s[i] == 'B' and s[i+1] == 'W': # 只将前面的B变成Ws[i] = 'W's[i+1] = 'B'res_cnt += 1res.append(i + 1)i += 1elif s[i] == 'W': # 如果是W则不用操作i += 1else: # B的数量为奇数,需要将一些W变成Bi = 0while i < n - 1:if s[i] == 'W' and s[i+1] == 'W': # 连续的两个W都变成Bs[i] = 'B's[i+1] = 'B'res_cnt += 1res.append(i + 1)i += 2elif s[i] == 'W' and s[i+1] == 'B': # 只将前面的W变成Bs[i] = 'B's[i+1] = 'W'res_cnt += 1res.append(i + 1)i += 1elif s[i] == 'B': # 如果是B则不用操作i += 1# 输出结果if res_cnt > 0:print(res_cnt)for x in res:print(x, end = ' ')print()else:print(0)

这段代码的时间复杂度为O(Tn)O(Tn)O(Tn),其中TTT是测试用例的数量,nnn是输入字符串的长度。这是因为代码中有一个外层循环,循环TTT次,而每次循环中都要对长度为nnn的输入字符串进行遍历,所以总时间复杂度是O(Tn)O(Tn)O(Tn)

在代码中,使用了一些内置函数和操作,如**s.count()s[i]**等,这些操作的时间复杂度较低,可以忽略不计。因此,这段代码的主要瓶颈在于对输入字符串的遍历和修改操作。

如果要优化这段代码的时间复杂度,可能需要重新设计算法。可以考虑一些贪心策略,如将相邻的不同颜色的棋子互换,使得相邻的棋子颜色相同。这样可以尽可能地减少需要修改的棋子数量。但这个算法的正确性需要进行证明,同时实现也可能会比较复杂。

http://www.wangmingla.cn/news/94736.html

相关文章:

  • 深圳好看的网站建设哪家公司好如何发布一个网站
  • 效果好的网站建设公司主要推广手段免费
  • 如果域名网站用来做违法报个计算机培训班多少钱
  • 怎样做网站快手刷粉seo网站诊断流程
  • 广州网站vi设计报价天天外链
  • 网站建设需要的人员合肥网站推广优化
  • 动力启航做网站长春百度seo排名
  • 做网站优化需要做什么商旅100网页版
  • 建设端午节网站的目的主题百度自然排名优化
  • 爱南宁app下载官网最新临沂seo优化
  • 网站建设小公司生存广州seo团队
  • wordpress手机编辑网络优化包括
  • 棋类游戏网站开发搜索引擎平台排名
  • 万网网站备案系统搜索引擎调词平台价格
  • 昆山科技网站建设企业宣传软文
  • 手机如何创造网站app推广活动策划方案
  • 中企动力做的网站升级收费百度网页版登录入口
  • wix网站做图片能折叠吗怎样在网上做宣传
  • 创业网站推广怎么做云优化seo
  • 图片素材网站排行榜百度学术免费查重入口
  • 网页制作的价格成都seo招聘
  • 做IP授权的一般看什么网站游戏代理免费加盟
  • 岭南地区网站建设网页快速收录
  • 网站联系方式要素北京朝阳区优化
  • 深圳网站制作公司哪儿济南兴田德润优惠吗东莞全网营销推广
  • 桂林论坛网搜索引擎优化营销
  • 免费产品网站建设seo外链优化策略
  • 推广的网站有哪些网站提交收录软件
  • 营销类网站建设文案代写在哪里接单子
  • 国家房管局官网查询系统网站seo优化技能