题解:P13049 [GCJ 2020 Qualification] Nesting Depth
abc1234shi · · 题解
题意
题意其实就是插入括号,使得所有括号内的字符串和括号外的字符串都是平衡字符串。
平衡字符串的定义:字符串中每个有出现的字母(题目中是数字)出现的次数都相同。当然,如果出现只一种字母(数字),则它本身就是平衡字符串。
比一般水题加强一点的是位置
题目最重要的一点是,要使得答案字符串长度最短。
思路
好家伙,这不贪心配上字符串,淄博烧烤串吗?
题目让我们维护一个答案字符串:我们先定义一个变量
如果
如果
然后直接将这个数字加入答案字符串,最后可能还有的左括号没有匹配右括号,所以要输出剩下的
最后注意,输出时还要输出测试用例编号。我喜欢将数据总行数递减,所以先将数据总行数存档,后用存档的数据总行数减去现在的数据剩余行数(虽然比较麻烦)。
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
int h=t;
while(t--){
string r="";
string s;
cin>>s;
int l=s.length();
int sd=0;
for(int i=0;i<l;i++){
int d=s[i]-'0';
while(d>sd){
r+='(';
sd++;
}
while(d<sd){
r+=')';
sd--;
}
r+=s[i];
}
while(sd>0){
r+=')';
sd--;
}
cout<<"Case #"<<h-t<<": "<<r<<endl;
}
return 0;
}
细节
- 每一轮循环后要进行清空。
- 每一次输出答案要进行换行。
- 遍历字符串时记得从
0 开始(因为字符串的存储是从0 开始的)。