Editorial for Tèo và xâu đối xứng (Bản dễ)


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Subtask 1

|s|18, nên với mỗi xâu con chúng ta có thể biểu diễn xâu dưới dạng long long, rồi kiểm tra thuần bằng phép modulo.

ĐPT: O(|s|3)

Subtask 2

|s|102, nên khi biểu diễn dưới dạng long long sẽ bị tràn số, dẫn đến việc kiểm tra không chính xác. Vì vậy, ta cần một cách nhanh hơn để kiểm tra một số có chia hết cho 2,3,5 hay không.

  • Vì chia hết cho 25, nên số đó phải chia hết cho 10, suy ra chữ số tận cùng luôn là 0.

  • Để kiểm tra tính chia hết cho 3, chúng ta nhận xét với mỗi số chia hết cho 3 thì tổng số chữ số của nó luôn chia hết cho 3, việc chứng minh mình xin nhường cho bạn đọc.

Kết hợp hai điều kiện này, chúng ta có thể dễ dàng kiểm tra một số có chia hết cho 2,3,5 mà không cần biểu diễn dưới dạng long long.

ĐPT: O(|s|3)

Subtask 3

Thay vì kiểm tra một xâu t là xâu đối xứng hay không trong O(t). Chúng ta có thể kiểm tra bằng phương pháp quy hoạch động.

Gọi dpl,r=1 nếu xâu slsl+1...sr là xâu đối xứng, dpl,r=0 nếu không.

Khi đó, ta có công thức truy hồi:

  • Khi l=r, dpl,r=1.
  • Khi r=l+1, dpl,r=1 nếu sl=sr.
  • Nếu không thỏa hai điều kiện trên, dpl,r=1 nếu sl=sr dpl+1,r1=1.

Việc tính mảng dp có thể xử lý bằng duyệt hoặc đệ quy và kiểm tra xâu có chia hết cho 3 có thể xử lý bằng mảng tiền tố.

ĐPT: O(|s|2)


Comments

Please read the guidelines before commenting.


There are no comments at the moment.