ぬるぬるの競プロ日記

コードをぬるぬる書きたいです。

AGC029 A - Irreversible operation

初めに思いついたこと:

・前からシミュレーション

->何往復もするのでかなりの計算量になる。(N<=10^5)

 

・反転数っぽい。

ー>BITか?

ー>ダメ。AGC-AでBITが出るわけない。(ぐっと我慢する)

(もっと楽な方法があるはず)

 

実験を進めていくと・・・

・どんな状態がきても、最終的な状態は

WW......WBB........B

みたいな感じになる。

こうでない場合、WBW or BWB が存在するので最終状態にはなり得ない。

 

・なので、Wを左端に寄せていくことを考える。

ー>Wどうしの相対的な位置を変えるのは無駄なので、一番左のWから、左に詰めていく。

 

実装:

numは次にWを詰める場所を表す。

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

signed main() {
  string s;
  cin >> s;

  int sum = 0, num = 0;
  for (int i = 0; i < s.size(); i++) {
    if (s[i] == 'W') {
      sum += i - num;
      num++;
    }
  }
  cout << sum << endl;
  return 0;
}

感想:

10分かかった。5分で解きたかった。

全体としては1完でした。

実力不足です。精進します。