#include <bits/stdc++.h>
using namespace std;

#define ll long long

int main() {
    string s;
    if (!(cin >> s)) return 0;
    
    int ans = 0;
    int lzone = 0, mzone = 0, szone = 0; 
    
    for (int i = 0; i < s.length(); i++) {
        if (s[i] == 'L') lzone++;
        else if (s[i] == 'M') mzone++;
        else szone++;
    }

   
    int lstart = 0, lend = lzone - 1;
    int mstart = lzone, mend = lzone + mzone - 1;
    int sstart = lzone + mzone, send = (int)s.length() - 1;

    int minl = 0, sinl = 0, linm = 0, sinm = 0, lins = 0, mins = 0;

    for (int i = lstart; i <= lend; i++) {
        if (s[i] == 'M') minl++;
        else if (s[i] == 'S') sinl++;
    }
    for (int i = mstart; i <= mend; i++) {
        if (s[i] == 'L') linm++;
        else if (s[i] == 'S') sinm++;
    }
    for (int i = sstart; i <= send; i++) {
        if (s[i] == 'M') mins++;
        else if (s[i] == 'L') lins++;
    }

  
    ans += min(lins, sinl) + min(linm, minl) + min(sinm, mins);
    

    // 每三本形成一个环的书需要两次交换
    ans += (abs(lins - sinl) + abs(linm - minl) + abs(sinm - mins)) / 3 * 2;
    
    cout << ans;
    return 0;
}

本质上就是先按L,M,S分块,本来在对应块里的不用动,优先换互相占了对方位置的书,这样换一次就能使两本书到对应位置,剩下的书每三本成环,每个环要交换两次
0 回复 0 转发 0 喜欢 13 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!