Official

C - PC on the Table Editorial by nok0


縦は独立なので、\(H=1\) の場合が解ければよいです。この問題は貪欲法で解くことができます。

具体的には、\(S\) を左から見ていき、T\(2\) 個連続しているならば PC で置き換えるという操作を行えばよいです。正当性は、PC で置き換える操作の回数の上界を達成できることから従います。(T\(K\) 個連続しているとき、操作は高々 \(\lfloor\frac{K}{2}\rfloor\) 回しか行えませんが、上述のアルゴリズムはこの上界を達成しています。)


実装例(C++):

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

int main() {
    int h, w;
    cin >> h >> w;
    for(int i = 0; i < h; i++) {
        string s;
        cin >> s;
        for(int j = 0; j < w - 1; j++) {
            if(s[j] == 'T' and s[j + 1] == 'T') {
                s[j] = 'P';
                s[j + 1] = 'C';
            }
        }
        cout << s << endl;
    }
}

posted:
last update: