题解:P12690 [KOI 2022 Round 1] ABBC

· · 题解

贪心。

\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; } ``` --- 机房键盘怎么这么难用啊。