SRM 151 DIV2 Level One - PrefixCode

しばらくブログラムよりも英語で悩みそうだ。


電話番号とかだと、東京が03,大阪が06みたいになってる。そういう文字集合をPrefixCodeというらしい。

035という番号をどこかの地域に割り当てるなんて事はしないので、PrefixCodeの正当性をチェックしたいと。


{"10001", "011", "100", "001", "10"}が与えられた時は、100が不正なので、"No, 2"を返して、

{"1010", "11", "100", "0", "1011"}なら、PrefixCodeとして使えるので"Yes"を返すと。


ふぅ。ここまで理解するのにだいぶ時間がかかるな。

#include <vector>
#include <string>
#include <sstream>
using namespace std;

class PrefixCode
{
public:
    static bool cmp(string a, string b) {
        int i, len_a = a.length(), len_b = b.length;

        for (i = 0; i < len_a, && i < len_b && a[i] == b[i]; i++)
            ;

       return i == len_a;
    }

    static string isOne(vector<string> words)
    {
        for (int i = 0; i < words.size(); i++)
            for (int j = 0; j < words.size(); j++)
                if (i != j && cmp(words[i], words[j])) {
                    stringstream ss;
                    ss << "No, " << i;
                    return ss.str();
                }

        return "Yes";
    }
};

cmpはSTLの中にありそうな気もする。