题解:P12672 「LAOI-8」近期我们注意到有网站混淆视听

· · 题解

十分简单的题目。

我们先把 LGMCSP 的个数统计出来,设这两个的出现次数为 ab

显然,对于所有 LGM,我们只需要进行 \left \lceil \dfrac{a}{2} \right \rceil 次操作就可以边消失。

证明很简单,只需要与相邻的其中一个变走就行了。就像 LGMLGMLGMLGMLGM 这种,把第一个 LGM 和第二个 LGM 变,第三个 LGM 和第四个 LGM 变,第五个 LGM 和自己变,就把所有 LGM 变消失了。

因为要最小,所以答案就是 \min (\left \lceil \dfrac{a}{2} \right \rceil,\left \lceil \dfrac{b}{2} \right \rceil),这样就做完了。

AC 代码:

#include <iostream>
#include <cmath>
using namespace std;

signed main()
{
    int _;
    cin>>_;
    while(_--){
        string s;
        cin>>s;
        int a = 0,b = 0;
        for(int i = 0;i<s.length()-2;i++){
            if(s[i]=='L'&&s[i+1]=='G'&&s[i+2]=='R') a++;//统计LGM的个数
            if(s[i]=='C'&&s[i+1]=='S'&&s[i+2]=='P') b++;//统计CSP的个数
        }
        cout<<min(ceil(a*1.0/2),ceil(b*1.0/2))<<endl;//计算答案
    }
    return 0;
}