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.
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:
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\) và \(cur\) tương ứng \(s_{i - 1}\) và \(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)