Codeforces - 877B - Nikita and string

★ Today's tune: https://youtu.be/UVmWLJVMBa8

★ Link: https://codeforces.com/contest/877/problem/B

★ Tags: prefix sum

★ Difficulty: 1500 (much easier than this rating)

★ Today's tune: https://youtu.be/64_O0cvQs0M

★ Tóm tắt: 

Cho xâu s chỉ gồm các ký tự "a" và "b". Định nghĩa một xâu đẹp là xâu khi cắt thành 3 phần (có thể rỗng) thì phần đầu và phần cuối chỉ gồm ký tự "a", và phần giữa chỉ gồm ký tự "b". Từ xâu s có thể xoá một số ký tự để thu được một xâu đẹp. Yêu cầu tìm độ dài lớn nhất có thể của xâu đẹp thu được.

★ Ý tưởng: sử dụng prefix sum để đếm số ký tự "a" và "b".

Gọi prefA[i] là số ký tự "a" xuất hiện từ đầu xâu s đến vị trí i (s[1...i]).

Gọi prefB[i] là số ký tự "b" xuất hiện từ đầu xâu s đến vị trí i (s[1...i]).

Suy ra để đếm số ký tự "a" từ đoạn i + 1 --> j ta sẽ lấy prefA[j] - prefA[i], tương tự với ký tự "b".

Ta nhận xét xâu thu được sẽ có một trong các dạng sau:

...ABA... (TH chính)

...BBA... (TH1)

...AAA... (TH2)

...ABB... (TH3)

...BBB... (TH4)

Từ đây có thể chạy 2 vòng for để xét vị trí từ: 1 --> i, i + 1 --> j, j + 1 --> n (TH chính).

Lưu ý có thêm các trường hợp :

TH1: rỗng, 1 --> j, j + 1 --> n (phần đầu rỗng).

TH2: 1 --> i, rỗng, i + 1 --> n (phần giữa rỗng).

TH3: 1 --> i, i + 1 --> n, rỗng (phần cuối rỗng).

TH4: rỗng, 1 --> i, rỗng (phần đầu và cuối đều rỗng).

Các bạn có thể xem hình để hiểu rõ hơn.

codeforces, codeforces 877b, 877b codeforces, binary search, prefix sum

Comments

Popular posts from this blog

Codeforces - 1433D - Districts Connection

Codeforces - 1462E2 - Close Tuples (hard version)

Kadane's algorithm - Finding maximum rectangular submatrix