提出AC
Submission #8511739 - AtCoder Beginner Contest 047
int main() { cout <<setprecision(10); string S; cin >> S; int n = S.size(); int count = 0; For(i,1,n){ if(S[i] != S[i-1]){ count ++ ; } } cout << count << endl; }
解法
黒と白の区画がいくつあるかだけ数えればいい
白 黒黒黒 白
みたいなとき
左と右に黒を置く(コストは2)
だけど、
そう考えるってよりかは
左にどんどん置いていく
まず一番左に黒
黒 黒 黒黒黒 白
次に一番左にしろ
白白白白白白白
って考えたほうが分かりやすかったです(どちらもコストは2)
黒や白が何個連続していようが、オセロのルール上、白と白 もしくは黒と黒で挟まれた区画
が全部 挟むのに使った色に変換するので
何個連続してるかは関係なくて、何区画あるかが分かればいい。
以後 白 黒 白 は白の区画 黒の区画 白の区画 みたいな感じで考えて
一番左の区画の色と違う色を置くことで区画を1個ずつ減らしていくことが出来て
区画を1までもっていけばいい
つまり、求める答えは区画-1