题解:P13414 [COCI 2012/2013 #4] ESEJ

我们可以用栈做。

首先如果字母 AA 的数量或字母 BB 的数量为奇数,那么不可能匹配。

维护一个栈,如果栈顶元素与当前元素相同那么弹出,否则就将这个元素扔进去,如果到最后栈是空的那么可以匹配。

结合样例 3 理解。

stkstk 现在是空的(左边栈底,右边栈顶)。

第一个字符 AA,扔进去,stk=Astk= \texttt{A}

第二个字符 BB,扔进去,stk=ABstk=\texttt{AB}

第三个字符 BB,与栈顶元素相同,弹出栈顶,stk=Astk=\texttt{A}

第四个字符 AA,与栈顶元素相同,弹出栈顶,stkstk 内无元素。

第五个字符 BB,扔进去,stk=Bstk=\texttt{B}

第六个字符 BB,与栈顶元素相同,弹出栈顶。

栈内无元素,所以可以成功配对。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<bits/stdc++.h>
using namespace std;
int n,ans;
string s;
bool florr(){
cin>>s;
int ca=0,cb=0;
for(int i=0;i<s.size();i++)if(s[i]=='A')ca++;else cb++;
if(ca%2||cb%2)return 0;
stack<int> stk;
for(int i=0;i<s.size();i++){
if(stk.size()&&stk.top()==s[i])stk.pop();
else stk.push(s[i]);
}
return stk.empty();
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
while(n--)ans+=florr();
cout<<ans<<"\n";
return 0;
}

题解:P13414 [COCI 2012/2013 #4] ESEJ
http://zhoujunchen666.github.io/2025/10/30/题解:P13414-COCI-2012-2013-4-ESEJ/
作者
zhoujunchen
发布于
2025年10月30日
许可协议