专栏文章
题解:B4392 [常州市赛 2025] 压缩
B4392题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minqe0ji
- 此快照首次捕获于
- 2025/12/02 06:38 3 个月前
- 此快照最后确认于
- 2025/12/02 06:38 3 个月前
提供一种简单的方法。
思路
我们定义一个答案字符数组 ,用 表示其当前的长度。我们遍历原字符串,设当前遍历到第 位,如果 与 不相同且 不是通配符,那么令 。
因为答案的长度最多为 ,所以如果 达到了 ,就说明一定可以消除,比如
1010 或 0101。那么我们可以直接让 ,即保留前两位。同理,如果此时 且 当前遍历的 为通配符,如 101#,此时的情况相当于 ,我们同样令 即可。遍历完后我们需要再特判一下,如果 为通配符且 ,如
#101,这种情况同样相当于 ,只是我们保留后两位即可。代码
CPP#include<bits/stdc++.h>
using namespace std;
int k;
string s;
char a[5];
int main(){
cin>>s;
for(int i=0;i<s.size();i++){
if(a[k]!=s[i]&&s[i]!='#'){
a[++k]=s[i];
if(k==4||(k==3&&s[i]=='#')){
k=2;
}
}
}
if(s[0]=='#'&&k==3){
for(int i=2;i<=3;i++){
cout<<a[i];
}
return 0;
}
for(int i=1;i<=k;i++){
cout<<a[i];
}
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...