#C++ swapの距離に関する問題がわからない
N個のオセロの石が一列に並んでいます。 それぞれの石の状態は長さ N の文字列 S によって表されており、 Si=B のとき左から i 番目の石の表面は黒色、 Si=W のとき左から i 番目の石の表面は白色となっています。ここで、以下の操作を行うことを考えます。左から i 番目の石の表面が黒色、左から i+1 番目の石の表面が白色であるような i (1≤i<N) を一つ選び、 その 2 つの石をともに裏返す。つまり、左から i 番目の石の表面が白色、左から i+1番目の石の表面が黒色になるようにする。
最大で何回この操作を行うことができるか求めてください。
##入力例
BWBWBW
##出力
6
質問
こちらの問題を以下のような実装で提出しましたが間違った回答になってしまいます。
サンプルケースは通ったのですが、他のどの部分に問題があるのかを教えていただけたら幸いです。
実装ではswapは行なっていないのですが、求める物は白と黒のswapした距離を求める問題です。
##私の実装
#include <bits/stdc++.h> using namespace std; int main() { string s; cin >> s; int r = 0; // 一番右側にあるWを探して位置を変数rに保存 for(int i=s.size()-1; i>=0; i--) { if(s[i] == 'W') { r = i; break; } } int ans = 0; for(int i=r-1; i>=0; i--) { if(s[i] == 'B') { ans += r-i; // Bを探して一番右にあるWとの距離を足し合わせる r--; // 右端の位置を更新 } } cout << ans << endl; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。