TopCoder SRM 144 DIV 1 Easy 練習

問題

二進文字列Pに対するエンコードQを次のように考える。

 Q[i] = P[i-1] + P[i] + P[i+1]

Qが与えられる。 P[0] = '0'とした場合とP[0] = '1'とした場合にそれぞれPを復元して返せ。ただし復元不可能な場合はNONEを返すこと。

やるだけ、なんだけどやっぱり遅い。

なんでかってわざわざ別々に計算してる。

関数化して二回呼び出せばいいだけなのにね。

using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
using System.Collections.Generic;

public class BinaryCode {
    public string[] decode(string Q) {
        string p0 = "0", p1 = "1";
        bool b0 = true, b1 = true;

        for (int i = 0; i < Q.Length; ++i)
        {
            int n0 = Q[i] - '0', n1 = Q[i] - '0';
            for (int j = -1; j <= 0; ++j)
            {
                if (i + j >= 0)
                {
                    if (b0) n0 -= (p0[i + j] - '0');
                    if (b1) n1 -= (p1[i + j] - '0');
                }
            }
            if (i == Q.Length - 1)
            {
                if (n0 != 0) b0 = false;
                if (n1 != 0) b1 = false;
                break;
            }
            if (n0 == 0 || n0 == 1)
                p0 += n0;
            else
                b0 = false;

            if (n1 == 0 || n1 == 1)
                p1 += n1;
            else
                b1 = false;
        }

        string[] res = new string[2];
        if (b0) res[0] = p0; else res[0] = "NONE";
        if (b1) res[1] = p1; else res[1] = "NONE";
        return res;
    }
}