Title

AT_abc328_d [ABC328D] Take ABC 题解

题目大意

告诉你一个由 A、B、C 三种字符组成的字符串 s,每次消除最左边的一个字符串 ABC,问最后剩下的字符串是什么。

解题思路

很简单的一道题,我们考虑用栈来维护。对于每个字符,如果是 A 或 B,那么直接进栈,否则的话,考虑当前栈顶的两个元素能否和当前的 C 共同构成一个字符串 ABC 如果能的话,弹出两个栈顶元素,不能的话,就把当前的 C 也加入栈中。

AC 代码

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<time.h>
#define N 200005
char sta[N],s[N];
int tail;
inline void work(){
    scanf("%s",s+1);
    int len=strlen(s+1);
    for(int i=1;i<=len;++i){
        if(s[i]=='A') sta[++tail]='A';
        else if(s[i]=='B') sta[++tail]='B';
        else{
            if(sta[tail]=='B'&&sta[tail-1]=='A'){
                tail-=2;
            }else sta[++tail]='C';
        }
    }for(int i=1;i<=tail;++i)
        putchar(sta[i]);
}signed main(){
    work();
}
posted @   UncleSam_Died  阅读(5)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示