////////////////////////// /// Stress testing ////////////////////////// #include std::string random_string(std::string::size_type length) { static auto &chrs = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; static std::mt19937 rg{std::random_device{}()}; static std::uniform_int_distribution pick(0, sizeof(chrs) - 2); std::string s; s.reserve(length); while (s.length() < length) { char ch = chrs[pick(rg)]; if (s.find(ch) == string::npos) { s += ch; } } return s; } size_t solve(const string &s); void test() { srand(100); #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wmissing-noreturn" while (true) { string::size_type len = (unsigned long) (rand() % 50 + 1); string s = random_string(len); int count = rand() % 5000 + 2; string input; for (int i = 0; i < count; ++i) { input += s; } string input1 = input; input1 = input1.substr(rand() % (input1.length() - s.length())); input1 = input1.substr(0, rand() % (input1.length() - s.length()) + s.length()); if (input1.empty()) continue; size_t k = solve(input1); if (k != s.length()) { cout << "boom:" << input1; } } #pragma clang diagnostic pop } //////////////////////////