AT_abc428_c 题解
沦落到写 C Sol。
虽然但是对于一个只过了前两题的人来说写 C Sol 不过分对吧。
直接根据栈来判断很麻烦的,因为有删除操作。
但是可以考虑换一个角度,把 ( 看作 ) 看作
考虑维护前缀 stack
首先考虑加入的操作。很显然的,我们要往
然后考虑删除的操作。这太不要脑子了!我们直接让
int opt=read();
if(opt==1){
char c;cin>>c;
int x=(c=='('?1:-1);
int st=(sum.size()?sum.top():0);
int mt=(mn.size()?mn.top():0);
sum.push(st+x);
mn.push(min(mt,st+x));
}else sum.pop(),mn.pop();
最后那就是判断啦!只有当
if(sum.empty())cout<<"Yes\n";
else if(!sum.top()&&!mn.top())cout<<"Yes\n";
else cout<<"No\n";
如果本篇题解对你有帮助的话,麻烦你点一个小小的赞,真是太感谢啦!