ARC 170

文章讲述了在解决编程题目中,如何通过最少的操作步数调整括号序列使其合法,涉及判断括号配对和添加操作以达到目标。作者分享了策略并解释了解决此类问题的关键思路。
摘要由CSDN通过智能技术生成

前言:第一次打regular场,大败而归,只出了A题。感觉这段时间应该多vp几场regular局,训练效果还是不错的。

A:赛时乱写通过了此题,现在重新梳理一下思路。

对于一次操作,可以使S新增0位,1位,2位和T相等的位置。显然新增0位的操作无意义,即原本s[i]=t[i],s[j]=t[j]

 要求使操作的步骤最小化,那么我们应尽可能多地进行新增2位的操作,即修改s[i]='B',t[i]='A';s[j]='A',t[j]='B'(i<j)这种情况。现在把s[i]\neq t[i]的位置单独取出,将其中s[i]='B'记作 ( ;   将s[i]='A'记作 ) 。这样形成了一个括号序列,长度为len。

如果该括号序列合法,那么答案即为len/2。

如果不合法,只要括号序列最左边是左括号且最右边是右括号,那么一定有解(注意有解和合法的区别)。答案即为能配对的括号对数加上单个括号的数量。如果最左边不是左括号或者最右边不是右括号,那么需要在括号序列最前面添加左括号或者在最后面添加右括号,在s[i]=t[i]的地方寻找与最左边或最右边括号配对的地方,能找到则有解,反之无解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值