#1664. ĐẾM CHUỖI WOW (WOWSUB)

Bộ nhớ: 512 MiB Thời gian: 1000 ms Nhập/xuất từ luồng chuẩn
Kiểu bài: Thông thường Kiểu chấm: So sánh văn bản
Đưa lên bởi: Trùm CUỐI

Đề bài

Cho một xâu ký tự S có độ dài n , chỉ bao gồm các ký tự 'v' và 'o'.

Trong bài toán này, mỗi cặp ký tự 'v' đứng cạnh nhau (tức là vv) được coi là một ký tự 'w'. Nhiệm vụ của bạn là đếm số lượng chuỗi con (subsequence) có dạng "wow" được tạo ra từ xâu S .

Cụ thể, một chuỗi con "wow" được xác định bởi bộ ba chỉ số (i, j, k) thỏa mãn các điều kiện sau:

  1. (S_i, S_{i+1}) = ('v', 'v') (tạo thành chữ 'w' đầu tiên).
  2. S_j = 'o' (tạo thành chữ 'o').
  3. (S_k, S_{k+1}) = ('v', 'v') (tạo thành chữ 'w' cuối cùng).
  4. i + 1 < j < k .

Dữ liệu:

  • Một dòng duy nhất chứa xâu ký tự S ( 1 \le |S| \le 10^6 ). Xâu S chỉ chứa các ký tự 'v' và 'o'.

Kết quả:

  • Một số nguyên duy nhất là số lượng chuỗi con "wow" tìm được. Vì kết quả có thể rất lớn, hãy sử dụng kiểu dữ liệu số nguyên 64-bit (ví dụ: long long trong C++ hoặc long trong Java).

Ví dụ:

Dữ liệu:

vvovv

Kết quả:

1

Giải thích:

  • Có một cặp 'vv' ở chỉ số (1, 2), một ký tự 'o' ở chỉ số 3, và một cặp 'vv' ở chỉ số (4, 5). Bộ ba này tạo thành "wow".

Dữ liệu:

vvvovvv

Kết quả:

4

Giải thích:

  • Các vị trí có thể tạo thành 'w' (cặp 'vv') là: các cặp chỉ số (1, 2) và (2, 3) ở phía trước 'o'; các cặp (5, 6) và (6, 7) ở phía sau 'o'.
  • Với mỗi cặp 'w' ở trước và mỗi cặp 'w' ở sau, ta kết hợp với ký tự 'o' ở giữa. Tổng cộng có 2 \times 2 = 4 cách.

Giới hạn:

  • Subtask #1 (20% số điểm): |S| \le 100 .
  • Subtask #2 (30% số điểm): |S| \le 5000 .
  • Subtask #3 (20% số điểm): |S| \le 10^6 và xâu S có chứa nhiều nhất 1 ký tự 'o'.
  • Subtask #4 (30% số điểm): |S| \le 10^6 , không có ràng buộc gì thêm.