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 @ 2023-11-12 16:01  UncleSam_Died  阅读(15)  评论(0)    收藏  举报  来源