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の中にありそうな気もする。