题解:P12690 [KOI 2022 Round 1] ABBC
fish_love_cat
·
·
题解
贪心。
把 \texttt{A,B,C} 的位置存下来,然后对于每一个 \texttt{A} 找目前还没删掉的最后的 \texttt{B},对于每一个 \texttt{C} 找目前还没删掉的最前的 \texttt{B} 就行了。
正确性大概就是注意到 $\texttt{AB,BC}$ 的贡献权值没有什么差异,所以先后考虑顺序是任意的,然后就是要尽可能的把难以删除的先删去,于是有了删除顺序。
做完了。
```cpp
#include<bits/stdc++.h>
using namespace std;
stack<int>A;
queue<int>C;
deque<int>B;
int ans;
int main(){
string s;
cin>>s;
for(int i=0;i<s.size();i++)
if(s[i]=='C')C.push(i);
for(int i=0;i<s.size();i++)
if(s[i]=='B')B.push_back(i);
for(int i=0;i<s.size();i++)
if(s[i]=='A')A.push(i);
while(!A.empty()&&!B.empty()){
if(A.top()<B.back())B.pop_back(),ans++;
A.pop();
}
while(!C.empty()&&!B.empty()){
if(C.front()>B.front())B.pop_front(),ans++;
C.pop();
}
cout<<ans;
return 0;
}
```
---
机房键盘怎么这么难用啊。