Xét tập hợp \(S\) bao gồm tất cả những xâu ký tự chỉ chứa đúng \(m\) ký tự X
, \(n\) ký tự Y
, và \(p\) ký tự Z
. Bạn hãy viết chương trình in ra xâu có thứ tự từ điển nhỏ thứ \(k\) trong tập \(S\).
Test 1
1 1 1
6
1
2
3
4
5
6
XYZ
XZY
YXZ
YZX
ZXY
ZYX
Tập \(S\) chứa đúng \(6\) xâu: XYZ
, XZY
, YXZ
, YZX
, ZXY
, và ZYX
(liệt kê theo thứ tự từ điển).
Test 2
4 3 5
4
1
10
1000
27720
XXXXYYYZZZZZ
XXXXYZYZZZYZ
XXYZYZXZXZYZ
ZZZZZYYYXXXX
Hiếu vừa khám phá ra một khái niệm mới và khoe ngay với Quý: định nghĩa về xâu đẹp. Theo đó, một xâu \(s\) được gọi là đẹp nếu \(s\) có không quá \(n\) ký tự và \(f(s)\) chia hết cho \(m\), trong đó \(f(s)\) bằng tổng tất cả các \(g(c)\) với \(c\) là một ký tự trong \(s\), quy ước \(g('a')=1\), \(g('b')=2\), \(g('c')=3,\cdots, g('z')=26\). Ví dụ, với \(n=3\) và \(m=9\) thì aap
là một xâu đẹp vì \(f("aap")=1+1+16=18\) chia hết cho \(m=9\), còn aah
không phải là một xâu đẹp vì \(f("aah")=1+1+8=10\) không chia hết cho \(m=9\). Với xâu rỗng \(s= \emptyset\) thì \(f(s)=0\) (do đó \(s=\emptyset\) cũng là một xâu đẹp với mọi \(m\)).
Quý hiểu ngay khái niệm mới của Hiếu và liền đố ngược lại cậu: hãy tìm ra xâu đẹp có thứ tự từ điển nhỏ thứ \(k\) với \(n\) và \(m\) cho trước. Nhắc lại, xâu \(A\) được xem là có thứ tự từ điển nhỏ hơn xâu \(B\) nếu tồn tại một vị trí \(t\) sao cho \(A[1...t−1]=B[1...t−1]\) và \(A[t]<B[t]\).
Vì số \(k\) của Quý đưa ra quá lớn nên Hiếu chỉ biết ấp úng và nhờ đến các bạn lập trình giải giúp câu đố này cho Hiếu. Hãy giúp Hiếu tìm ra xâu đẹp đó nhé!
Test 1
3 9 8
ace
Các xâu đẹp đầu tiên thứ tự từ điển là \(\emptyset\) (xâu rỗng), \(aag, aap, aay, abf, abo, abx\) và \(ace\).
Test 1
4 4
2 3 1 4
2 3
Test 2
4 100
2 3 5 4
-1
Note
Khánh Dung có một dãy số nguyên không âm \(\delta=(\delta_0, \delta_1,...,\delta_{n-1})\) thỏa mãn \(|\delta_i-\delta_{i-1}|\leq 1\) với mọi \(1\leq i < n\) và một số nguyên dương \(m\). Trong bài toán này, Khánh Dung chỉ quan tâm đến các xâu ký tự chỉ gồm các ký tự trong số \(m\) ký tự đầu tiên trong bảng chữ cái in thường.
Dung gọi một xâu \(\sigma=\sigma_0\sigma_1...\sigma_{n-1}\) là xâu lý thú khi và chỉ khi: với mọi \(i, j\) \((0\leq i, j < n)\) mà \(0 < |i-j|\leq \delta_i\) thì \(\sigma_i\ne \sigma_j\). Với mỗi xâu lý thú \(\sigma\), cô ấy gọi \(\text{rank}(\sigma)\) là số lượng xâu lý thú có cùng độ dài với xâu \(\sigma\) và có thứ tự từ điển nhỏ hơn hẳn \(\sigma\).
Cho biết ba giá trị \(n\), \(m\), \(k\) và dãy \(\delta\), bạn hãy lập trình xác định xâu \(s\) sao cho \(\text{rank}(s)=k\).
Test 1
3 5 48
1 2 3
eab
Xâu lý thú \(s\) cần tìm gồm có \(3\) ký tự đôi một khác nhau, đồng thời \(\text{rank}(s)=48\).
Test 2
4 5 214
1 0 0 1
cddc
Xâu lý thú \(s\) cần tìm có dạng \(\sigma_0\sigma_1\sigma_2\sigma_3\) với \(\sigma_0\ne \sigma_1\) và \(\sigma_2\ne \sigma_3\), đồng thời \(\text{rank}(s)=214\).
Khánh Dung có một dãy số nguyên không âm \(\delta=(\delta_0, \delta_1,...,\delta_{n-1})\) thỏa mãn \(|\delta_i-\delta_{i-1}|\leq 1\) với mọi \(1\leq i < n\) và một số nguyên dương \(m\). Trong bài toán này, Khánh Dung chỉ quan tâm đến các xâu ký tự chỉ gồm các ký tự trong số \(m\) ký tự đầu tiên trong bảng chữ cái in thường.
Dung gọi một xâu \(\sigma=\sigma_0\sigma_1...\sigma_{n-1}\) là xâu lý thú khi và chỉ khi: với mọi \(i, j\) \((0\leq i, j < n)\) mà \(0 < |i-j|\leq \delta_i\) thì \(\sigma_i\ne \sigma_j\). Với mỗi xâu lý thú \(\sigma\), cô ấy gọi \(\text{rank}(\sigma)\) là số lượng xâu lý thú có cùng độ dài với xâu \(\sigma\) và có thứ tự từ điển nhỏ hơn hẳn \(\sigma\).
Với hai xâu thú vị \(\alpha\) và \(\beta\) có cùng độ dài \(n\), Dung muốn tìm xâu thú vị \(\gamma\) có cùng độ dài \(n\) thỏa mãn \(\text{rank}(\gamma)=\text{rank}(\alpha)+\text{rank}(\beta)\) hoặc kết luận không tồn tại xâu ký tự nào như vậy.
Cho biết giá trị \(n\), \(m\), dãy \(\delta\), và hai xâu \(\alpha\), \(\beta\), bạn hãy lập trình giúp Dung xác định xâu \(\gamma\) nhé!
Test 1
3 5
1 2 3
bed
cad
eab
Xâu lý thú \(\gamma\) cần tìm gồm có \(3\) ký tự đôi một khác nhau, đồng thời \(\text{rank}(\gamma)=\text{rank}(\alpha)+\text{rank}(\beta)=23+25=48\).
Test 2
4 5
1 0 0 1
cacb
adbc
cddc
Xâu lý thú \(\gamma\) cần tìm có dạng \(\sigma_0\sigma_1\sigma_2\sigma_3\) với \(\sigma_0\ne \sigma_1\) và \(\sigma_2\ne \sigma_3\), đồng thời \(\text{rank}(\gamma)=\text{rank}(\alpha)+\text{rank}(\beta)=169+45=214\).
Cho \(1\) xâu \(S\) gồm \(n\) ký tự, ta sinh ra \(n\) xâu con của \(S\) là: \(T_1=S_{1..n}\), \(T_2=S_{2..n}\), \(T_3=S_{3..n}\),..., \(T_n=S_{n..n}\).
Sau đó ta sẽ sắp xếp \(n\) xâu \(T\) lại theo thứ tự từ điển tăng dần, \(1\) xâu \(A\) được xem là có thứ tự từ điển nhỏ hơn \(B\) nếu tồn tại \(1\) vị trí \(k\) sao cho \(A_{1..k-1}=B_{1..k-1}\) và \(A_k < B_k\).
Cuối cùng ta sẽ xây dựng mảng \(a_1\), \(a_2\),..., \(a_n\) với \(a_i=x\) nếu xâu \(T_x\) nằm ở vị trí \(i\) sau khi đã được sắp xếp tăng dần. Mảng \(a\) được gọi là Suffix Array của xâu \(S\).
Ví dụ:
bcab
.bcab
cab
ab
b
Yêu cầu:
a
đến z
.a
đến z
, trường hợp không có kết quả thì in ra \(-1\).Test 1
4 2
3 4 1 2
bdab
3 xâu đầu tiên theo thứ tự từ điển có Suffix Array như đã cho là:
bcab
bdab
beab
\(K=2\) nên kết quả sẽ là xâu bdab
.
Nguồn bài: VOS Round 23 - Lê Ðôn Khuê