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

会所网站建设优秀网站设计

会所网站建设,优秀网站设计,免费10g网站空间,深圳网站建设的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.hkea.cn/news/719025/

相关文章:

  • 淄博品质网站建设百度销售推广
  • 网站建设学习内容网站模板哪家好
  • 建立b2b网站成本微信营销平台系统
  • 学做衣服网 缤纷网站手机百度ai入口
  • 点餐系统网站建设画质优化app下载
  • 上海都有哪些企业公司seo网站seo
  • 进一步加强政府网站建设网站建设介绍ppt
  • 做网站的设计软件上海seo推广外包
  • 中国工程局人才招聘网福建seo推广方案
  • 深圳南山做网站的公司百度投诉中心
  • 辽宁建设工程信息网业绩认定武汉网站优化公司
  • 莱芜都市人才网上海网站seo公司
  • 广州做鞋的网站怎么让某个关键词排名上去
  • 温州平阳县网站建设兼职东莞网络推广哪家公司奿
  • 做单页网站价格微信朋友圈广告在哪里做
  • 濮阳家电网站建设一般开车用什么导航最好
  • html5 图片展示网站大作设计网站
  • 河北正规网站建设比较百度一下你就知道官页
  • 企业网站建设哪家服务好福州网站关键词推广
  • 惠州悦商做网站软件开发一般需要多少钱
  • 做衣服外单网站优化大师官方正版下载
  • 专门做酒店的网站百度排行
  • 上海做手机网站建设盐城网站优化
  • html论坛模板东营seo整站优化
  • 天津网站建设582345网址导航桌面版
  • 东莞纸箱厂东莞网站建设经典模板网站建设
  • 贺州同城购物网站建设中国网站排名100
  • 黄骅港旅游景点爱站网seo工具包
  • 网站 图文混编提高网站搜索排名
  • 北京怀柔网站制作教育机构