Hướng dẫn cho Perfect !!


Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.

Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.

Authors: SPyofgame


Spoiler Alert


Hint 1

  • Đề yêu cầu kiểm tra nếu tất cả xâu đối xứng đều có độ dài lẻ thì in ra YES

<=> Mình chỉ cần kiểm tra trong xâu có xâu đối xứng độ dài chẵn thì in ra NO


Hint 2

  • Xâu con đối xứng nhỏ nhất có độ dài chẵn có dạng aa với a là 2 kí tự bất kì

Mình chỉ cần kiểm tra trong xâu nếu tồn tại 2 kí tự kề nhau bằng nhau <=> tồn tại vị trí \(i\) để \(s_i = s_{i + 1}\) thì in ra NO


Reference AC code | \(O(n)\) time | \(O(1)\) auxiliary space | String-problem

C++
int main() {
    /// nhan xau
    string s;
    cin >> s;

    for (int i = 0; i + 1 < s.size(); ++i)
        if (s[i] == s[i + 1]) /// nếu 2 kí tự kề bằng nhau
            return cout << "NO", 0;

    return cout << "YES", 0; /// Ngược lại xâu chỉ toàn xâu đối xứng lẻ
}

Hint 3

Ta có thể không cần lưu mảng string \(s\). Thay vào đó là 2 biến \(pre\)\(cur\) tương ứng \(s_{i - 1}\)\(s_i\)


Reference AC code | \(O(n)\) time | \(O(1)\) auxiliary space | Online Solving, String-problem

C++
inline bool isLowerLatin(char c) { return 'a' <= c && c <= 'z'; } /// nếu là kí tự thuộc xâu
int main()
{
    for (char pre = getchar(), cur; isLowerLatin(cur = getchar()); pre = cur)
        if (pre == cur) return cout << "NO", 0; /// nếu 2 kí tự kề bằng nhau

    return cout << "YES", 0; /// Ngược lại xâu chỉ toàn xâu đối xứng lẻ
}

Bình luận (4)

Mới nhất
Tải bình luận...