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: