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; } }