https://yukicoder.me/problems/no/717
考察過程
1. 最適な動きを考える
2. 上下とも無地に最大何回できるかを考えると、両者の無地の枚数の最小値であると言える
3. 柄付きも同様
4. 上下ともで無地と柄付きをそれぞれ数えて、最小値の和が答えになる
解法
https://yukicoder.me/submissions/275462
cntS[c] := Sでc=0なら無地、c=1なら柄付きの枚数
cntT[c] := Tでc=0なら無地、c=1なら柄付きの枚数
これをそれぞれ計算する。
cはS[i]-'A'で求まる。
これは'A'-'A'=0, 'B'-'A'=1であることを利用している。
今回の場合では特に必須な考え方では無いが、知っておくと構文解析などで役立つ場合がある。
あとは、無地の最小値、柄付きの最小値を求めて、総和を取ると答え。
int N, M; string S, T; int cntS[2], cntT[2]; //--------------------------------------------------------------------------------------------------- void _main() { cin >> N >> M >> S >> T; rep(i, 0, N) cntS[S[i] - 'A']++; rep(i, 0, M) cntT[T[i] - 'A']++; int ans = 0; ans += min(cntS[0], cntT[0]); ans += min(cntS[1], cntT[1]); cout << ans << endl; }