QOJ.ac

QOJ

Time Limit: 1.5 s Memory Limit: 512 MB Total points: 100 Hackable ✓

#3293. Cách tách xuất sắc

Statistics

Nếu một xâu có thể được tách thành dạng $AABB$, trong đó $A$ và $B$ là các xâu không rỗng bất kỳ, ta gọi cách tách xâu này là một cách tách xuất sắc.

Ví dụ, với xâu aabaabaa, nếu đặt $A=\texttt{aab}$, $B=\texttt{a}$, ta tìm được một cách tách xâu này thành $AABB$.

Một xâu có thể không có cách tách xuất sắc nào, hoặc có nhiều hơn một cách tách xuất sắc. Chẳng hạn, nếu đặt $A=\texttt{a}$, $B=\texttt{baa}$, ta cũng có thể biểu diễn xâu trên bằng $AABB$; nhưng xâu abaabaa không có cách tách xuất sắc.

Bây giờ cho một xâu $S$ có độ dài $n$. Ta cần tìm tổng số cách tách xuất sắc trong tất cả các cách tách của mọi xâu con của nó. Ở đây, xâu con là một đoạn liên tiếp trong xâu.

Cần chú ý những điều sau:

  1. Các xâu con giống nhau xuất hiện ở vị trí khác nhau được xem là những xâu con khác nhau; các cách tách xuất sắc của chúng đều được tính vào đáp án.
  2. Trong một cách tách, cho phép $A=B$. Ví dụ, cccc có cách tách $A=B=\texttt{c}$.
  3. Bản thân một xâu cũng là một xâu con của chính nó.

Dữ liệu vào

Tệp đầu vào là excellent.in.

Mỗi tệp đầu vào chứa nhiều bộ dữ liệu. Dòng đầu tiên của tệp chỉ chứa một số nguyên $T$, biểu diễn số bộ dữ liệu. Bảo đảm $1\le T\le 10$.

Trong $T$ dòng tiếp theo, mỗi dòng chứa một xâu $S$ chỉ gồm chữ cái tiếng Anh viết thường, có ý nghĩa như trong đề bài.

Dữ liệu ra

Tệp đầu ra là excellent.out.

In $T$ dòng, mỗi dòng chứa một số nguyên biểu diễn tổng số cách tách xuất sắc trong tất cả các cách tách của mọi xâu con của xâu $S$.

Ví dụ

Dữ liệu vào 1

4
aabbbb
cccccc
aabaabaabaa
bbaabaababaaba

Dữ liệu ra 1

3
5
4
7

Ghi chú

Ta dùng $S[i,j]$ để biểu diễn xâu con từ ký tự thứ $i$ đến ký tự thứ $j$ của xâu $S$ (đánh số từ $1$).

Trong bộ dữ liệu thứ nhất, có tổng cộng $3$ xâu con có cách tách xuất sắc:

$S[1,4]=\texttt{aabb}$, cách tách xuất sắc là $A=\texttt{a}$, $B=\texttt{b}$;

$S[3,6]=\texttt{bbbb}$, cách tách xuất sắc là $A=\texttt{b}$, $B=\texttt{b}$;

$S[1,6]=\texttt{aabbbb}$, cách tách xuất sắc là $A=\texttt{a}$, $B=\texttt{bb}$.

Các xâu con còn lại không có cách tách xuất sắc, nên đáp án của bộ dữ liệu thứ nhất là $3$.

Trong bộ dữ liệu thứ hai, có hai loại, tổng cộng $4$ xâu con có cách tách xuất sắc:

Với các xâu con $S[1,4]=S[2,5]=S[3,6]=\texttt{cccc}$, các cách tách xuất sắc của chúng giống nhau, đều là $A=\texttt{c}$, $B=\texttt{c}$, nhưng vì những xâu con này ở vị trí khác nhau nên phải tính $3$ lần;

Với xâu con $S[1,6]=\texttt{cccccc}$, có $2$ cách tách xuất sắc: $A=\texttt{c}$, $B=\texttt{cc}$ và $A=\texttt{cc}$, $B=\texttt{c}$. Đây là các cách tách khác nhau của cùng một xâu con và đều phải tính vào đáp án.

Vì vậy, đáp án của bộ dữ liệu thứ hai là $3+2=5$.

Trong bộ dữ liệu thứ ba, $S[1,8]$ và $S[4,11]$ mỗi xâu có $2$ cách tách xuất sắc, trong đó $S[1,8]$ là ví dụ trong phần mô tả bài toán, nên đáp án là $2+2=4$.

Trong bộ dữ liệu thứ tư, $S[1,4]$, $S[6,11]$, $S[7,12]$, $S[2,11]$, $S[1,8]$ mỗi xâu có $1$ cách tách xuất sắc, còn $S[3,14]$ có $2$ cách tách xuất sắc, nên đáp án là $5+2=7$.

Ví dụ 2

Xem excellent/excellent2.in và excellent/excellent2.ans trong thư mục của thí sinh.

Ví dụ 3

Xem excellent/excellent3.in và excellent/excellent3.ans trong thư mục của thí sinh.

Nhiệm vụ con

Với mọi bộ kiểm thử, bảo đảm $1\le T\le 10$. Các giới hạn dưới đây áp dụng cho từng bộ dữ liệu đầu vào riêng lẻ, tức là cả $T$ bộ dữ liệu trong cùng một bộ kiểm thử đều thỏa mãn các giới hạn.

Giả sử $n$ là độ dài của xâu $S$. Phạm vi dữ liệu chi tiết của từng bộ kiểm thử được cho trong bảng sau:

Số hiệu bộ kiểm thử $n$ Ràng buộc khác
$1,2$ $\le 300$ Mọi ký tự trong $S$ đều giống nhau
$3,4$ $\le 2000$
$5,6$ $\le 10$ Không có
$7,8$ $\le 20$
$9,10$ $\le 30$
$11,12$ $\le 50$
$13,14$ $\le 100$
$15$ $\le 200$
$16$ $\le 300$
$17$ $\le 500$
$18$ $\le 1000$
$19$ $\le 2000$
$20$ $\le 30000$

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.