以下の内容はhttps://blog.hamayanhamayan.com/entry/2018/05/04/012540より取得しました。


LineOff [2018 TCO Algorithm Round 1B Easy]

文字列Sがある。
この文字列に以下の操作を最大何回行えるか。
「2つの隣接する文字が等しいなら、2つの文字を消す」

考察

1. TCOのRound1のEasyなので、簡単めな解法だろうという線から考える
2. DPとかで解くのも難しそう
3. 貪欲しか無いのでは?
4. 適当に操作してもあんまし結果変わらない?

解法

貪欲法で解く。
貪欲に操作を行っていくだけ。

struct LineOff {
    int movesToDo(string points) {
        int ans = 0;
        string s = points;

        while (1) {
            int ng = 1;
            int n = s.length();
            rep(i, 0, n - 1) if (s[i] == s[i + 1]) {
                string ss = "";
                if(i) ss += s.substr(0, i);
                if(i + 2 < n) ss += s.substr(i + 2);

                s = ss;
                ans++;
                ng = 0;
                
                break;
            }

            if (ng) return ans;
        }
    }
};



以上の内容はhttps://blog.hamayanhamayan.com/entry/2018/05/04/012540より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14