本來以為字串多大,結果就這點,直接暴力。
列舉起始點,對於每個起始點列舉後面 \(8 \sim 16\) 位有沒有能用的即可。
最後答案為 \(400\)。
附:計算程式碼
列舉程式碼如下:
for (int i = 0; i < n; ++i) {
for (int length = 8; length <= 16; ++length) {
if (i + length > n)
break;
string substring = s.substr(i, length);
if (check(substring))
++valid_count;
}
}
check 函式如下:
bool has_digit = false;
bool has_symbol = false;
unordered_set<char> symbols = {'+', '-', '*', '/', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '=', '<', '>', '?', '~', '`'};
for (char c : password) {
if (isdigit(c))
has_digit = true;
else if (symbols.find(c) != symbols.end())
has_symbol = true;
if (has_digit && has_symbol)
return true;
}
return false;