Alternating Current

时间:2020-11-27 15:54:48

Codeforces Round #200 (Div. 1) B:http://codeforces.com/problemset/problem/343/B

题意:这一题看懂题意是关键,题目的意思就是两根a,b电线相互缠绕,+表示a在b的上面,-表示b在a的上面,给以一个串,然后问你这两根线能否解开。

题解:显然,如果两个相邻的++或者--的话可以直接消去,然后就会想到用栈来模拟,相同的就消去,不同的就进栈,最后判断栈内是否为空就可以了。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+;
char ans[N],a[N];
int n,top;
int main(){
while(~scanf("%s",a)){
n=strlen(a);top=;
for(int i=;i<n;i++){
if(top==){
ans[++top]=a[i];
}
else if(a[i]==ans[top]){
top--;
}
else ans[++top]=a[i];
}
if(top==)printf("Yes\n");
else
printf("No\n");
}
}