Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- В этой задаче достаточно было рассмотреть несколько случаев.
- 1) Если пароль 𝑠
- изначально корректен, то ничего менять не нужно — просто выводим 𝑠.
- 2) Теперь попробуем изменить один символ, для этого переберем его и переберем три варианта его замены(любая цифра, любая заглавная латинская буква и любая строчная латинская буква). После замены проверим строку на корректность и если нашлась корректная строка — выведем её.
- 3) У нас не получилось заменить подстроку длины 0 и 1, а значит ответ минимум 2. Мы можем всегда его получить следующим образом: заменим первых два символа на «a1», если третий символ заглавная латинская буква, на «A1», если третий символ строчная латинская буква и на «aA», если третий символ — цифра.
- #include <bits/stdc++.h>
- using namespace std;
- string s;
- bool ok(string t){
- int msk = 0;
- for(int i = 0; i < int(t.size()); ++i){
- if(isupper(t[i])) msk |= 1;
- if(islower(t[i])) msk |= 2;
- if(isdigit(t[i])) msk |= 4;
- }
- return msk == 7;
- }
- int main() {
- //freopen("input.txt", "r", stdin);
- int t;
- cin >> t;
- for(int i = 0; i < t; ++i){
- cin >> s;
- if(ok(s)){
- cout << s << endl;
- continue;
- }
- bool fnd = false;
- for(int i = 0; i < int(s.size()); ++i){
- string t = s;
- t[i] = '1';
- if(ok(t)){
- cout << t << endl;
- fnd = true;
- break;
- }
- t[i] = 'a';
- if(ok(t)){
- cout << t << endl;
- fnd = true;
- break;
- }
- t[i] = 'A';
- if(ok(t)){
- cout << t << endl;
- fnd = true;
- break;
- }
- }
- if(fnd) continue;
- if(isupper(s[2])){
- s[0] = 'a';
- s[1] = '1';
- cout << s << endl;
- continue;
- }
- if(islower(s[2])){
- s[0] = 'A';
- s[1] = '1';
- cout << s << endl;
- continue;
- }
- if(isdigit(s[2])){
- s[0] = 'a';
- s[1] = 'A';
- cout << s << endl;
- continue;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment