Hatena::Grouptopcoder

TopCoderの問題を解く

解いた問題の一覧表

2009-04-04

BinaryCode

| 15:56

問題文

221.33->540.49 / 550

最後の数が 0 かどうかを確認する必要がある。

class BinaryCode {
public:
    vector <string> decode(string message) {
        const int len = message.length();
        vector <string> result;
        for (int i = 0; i <= 1; i++) {
            vector<int> p(len+2, 0);
            p[1] = i;
            for (int j = 0; ; j++) {
                int q = (message[j]-'0')-p[j]-p[j+1];
                if (q == 0 || q == 1) {
                    p[j+2] = q;
                    if (j == len-1) {
                        if (q == 0) {
                            result.push_back(string(len,'0'));
                            for (int k = 0; k < len; k++)
                                result.back()[k] += p[k+1];
                        } else
                            result.push_back("NONE");
                        break;
                    }
                } else {
                    result.push_back("NONE");
                    break;
                }
            }
        }
        return result;
    }
};