頭良くなりたい人

文系大学生shadeのブログです。競技プログラミングや人文学の話題,受験ネタなど。

AGC029 A - Irreversible operation

問題はこちら atcoder.jp

方針

題意の操作は,文字列 S においてBWWBにすることと同じです。また,SWW...WBB...Bとなった時点で操作は終了します。

つまり,Wに注目すると,1 回の操作で 1 つのW1 つ左に動き,S 中にWK 個あるとき,一番うしろのWK 番目に来た時点で操作が終了します。

S 中で i 個目のWx_i 番目にあるとき,これを i 番目に移動させるためには x_{i} - i 回の操作が必要です。

コード

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    string s;
    cin>>s;
 
    vector<int> coor_w;
    for(int i=0; i<s.size(); i++){
        if(s[i]=='W'){
            coor_w.push_back(i);
        }
    }
 
    long long count=0;
    for(int i=0; i<coor_w.size(); i++){
        count+=abs(coor_w[i]-i);
    }
 
    cout<<count<<endl;
}