Thuật toán sinh ôn chuyên
Xâu Nhị Phân Kế Tiếp
Nộp bàiPoint: 1
Cho một xâu nhị phân X có độ dài N. Hãy tìm xâu nhị phân kế tiếp của X trong thứ tự từ điển (từ điển tăng dần). Nếu X là xâu cuối cùng (toàn bit 1), hãy in ra xâu nhị phân đầu tiên (toàn bit 0).
Dữ liệu vào:
Dòng đầu tiên chứa số nguyên T là số lượng bộ test.
Mỗi bộ test gồm một xâu nhị phân X.
Dữ liệu ra:
In ra xâu nhị phân kế tiếp tương ứng với mỗi bộ test.
Giới hạn:
1 <= T <= 20
Độ dài xâu X <= 1000
Ví dụ:
Input:
2
010101
111111
Output:
010110
000000
Tập Con Kế Tiếp
Nộp bàiPoint: 1
Cho một tập con K phần tử của tập {1, 2, ..., N}. Hãy tìm tập con kế tiếp của nó theo thứ tự từ điển. Nếu tập con đã cho là tập cuối cùng, in ra tập con đầu tiên (tập {1, 2, ..., K}).
Dữ liệu vào:
Dòng đầu tiên chứa số bộ test T.
Mỗi bộ test gồm 2 số N, K và dòng tiếp theo là K số của tập con hiện tại.
Dữ liệu ra:
In ra tập con kế tiếp.
Giới hạn:
1 <= K <= N <= 1000
Ví dụ:
Input:
2
5 3
1 4 5
5 3
3 4 5
Output:
2 3 4
1 2 3
Xâu Nhị Phân K Bit
Nộp bàiPoint: 1
Liệt kê các xâu nhị phân độ dài N có đúng K bit 1 theo thứ tự từ điển.
Dữ liệu vào:
Số bộ test T, mỗi bộ test gồm N và K.
Dữ liệu ra:
Các xâu thỏa mãn.
Giới hạn:
1 <= K <= N <= 15
Ví dụ:
Input:
1
4 2
Output:
0011
0101
0110
1001
1010
1100
Liệt Kê Xâu Nhị Phân
Nộp bàiPoint: 1
Liệt kê tất cả các xâu nhị phân có độ dài N theo thứ tự từ điển tăng dần.
Dữ liệu vào:
Số nguyên dương N.
Dữ liệu ra:
Các xâu nhị phân độ dài N, mỗi xâu trên một dòng.
Giới hạn:
1 <= N <= 20
Ví dụ:
Input:
2
Output:
00
01
10
11
Liệt Kê Tổ Hợp
Nộp bàiPoint: 1
Liệt kê tất cả các tổ hợp chập K của N phần tử {1, 2, ..., N}.
Dữ liệu vào:
Hai số nguyên N và K.
Dữ liệu ra:
Các tổ hợp thỏa mãn theo thứ tự từ điển.
Giới hạn:
1 <= K <= N <= 15
Ví dụ:
Input:
4 2
Output:
1 2
1 3
1 4
2 3
2 4
3 4
Xâu AB
Nộp bàiPoint: 1
Liệt kê các xâu độ dài N chỉ gồm ký tự 'A' và 'B' sao cho có đúng K ký tự 'A'.
Dữ liệu vào:
Số nguyên N và K.
Dữ liệu ra:
Các xâu thỏa mãn.
Giới hạn:
1 <= K <= N <= 15
Ví dụ:
Input:
3 2
Output:
AAB ABA BAA
Xâu Nhị Phân Trước
Nộp bàiPoint: 1
Cho một xâu nhị phân X. Tìm xâu nhị phân xuất hiện ngay trước X trong thứ tự từ điển. Nếu X là xâu nhỏ nhất (toàn 0), in ra xâu toàn 1.
Dữ liệu vào:
Xâu X.
Dữ liệu ra:
Xâu nhị phân liền trước.
Giới hạn:
Độ dài X <= 1000
Ví dụ:
Input:
10100
Output:
10011
Thuận Nghịch Nhị Phân
Nộp bàiPoint: 1
Liệt kê các xâu nhị phân thuận nghịch (đọc xuôi ngược giống nhau) có độ dài N. (Gợi ý: Chỉ cần sinh một nửa đầu rồi lấy đối xứng).
Dữ liệu vào:
Số nguyên N (chẵn).
Dữ liệu ra:
Các xâu thuận nghịch.
Giới hạn:
2 <= N <= 20
Ví dụ:
Input:
4
Output:
0000
0110
1001
1111
Số Lộc Phát (thuật toán sinh)
Nộp bàiPoint: 1
Số Lộc Phát là số chỉ bao gồm các chữ số 6 và 8. Hãy liệt kê các số Lộc Phát có độ dài bằng N theo thứ tự tăng dần.
Dữ liệu vào:
Số nguyên N.
Dữ liệu ra:
Các số Lộc Phát.
Giới hạn:
1 <= N <= 15
Ví dụ:
Input:
2
Output:
66
68
86
88
Tập Con Trước
Nộp bàiPoint: 1
Cho một tổ hợp chập K của N. Tìm tổ hợp ngay trước nó. Nếu là tổ hợp đầu tiên, in ra tổ hợp cuối cùng.
Dữ liệu vào:
N, K và cấu hình hiện tại.
Dữ liệu ra:
Cấu hình liền trước.
Giới hạn:
1 <= K <= N <= 1000
Ví dụ:
Input:
5 3
2 3 4
Output:
1 4 5
Ghép Tên
Nộp bàiPoint: 1
Cho N chữ cái in hoa khác nhau. Hãy liệt kê các tổ hợp chập K của các chữ cái này theo thứ tự từ điển.
Dữ liệu vào:
N và K.
Dòng sau chứa N chữ cái (có thể chưa sắp xếp).
Dữ liệu ra:
Các tổ hợp tên.
Giới hạn:
1 <= K <= N <= 15
Ví dụ:
Input:
4 2
D C A B
Output:
A B
A C
A D
B C
B D
C D