Một dãy dấu ngoặc đúng là một dãy các ký tự "(" và ")" được định nghĩa đệ quy như sau: 1. () là một dãy dấu ngoặc đúng.
2. Nếu A là một dãy dấu ngoặc đúng thì (A) là dãy dấu ngoặc đúng. 3. Nếu B và C là hai dãy dấu ngoặc đúng thì BC là dãy dấu ngoặc đúng.
Yêu cầu: Cho một xâu ký tự S độ dài n chỉ gồm các dấu "(" và ")" (n chẵn, 2 ≤≤≤≤ n ≤≤≤≤ 200). Hãy tìm xâu T thoả mãn:
• T là dãy dấu ngoặc đúng độ dài n
• T là "giống" S nhất theo nghĩa: Số vị trí i mà T[i] ≠≠≠≠ S[i] là cực tiểu
Dữ liệu: Vào từ file văn bản BRACKETS.INP, chỉ gồm 1 dòng chứa xâu S
Kết quả: Ghi ra file văn bản BRACKETS.OUT cũng chỉ gồm một dòng ghi xâu T.
Ví dụ:
BRACKETS.INP BRACKETS.OUT )())())()))) ()((()))((())) )())())()))) ()((()))((()))
113. MÃ HOÁ BURROWS WHEELER
Cho một từ W độ dài n, người ta có một cách mã hoá như sau: Ví dụ với từ banana. Bước 1: Xét n hoán vị vòng quanh của W:
banana ananab nanaba anaban nabana abanan
Bước 2: Sắp xếp n hoán vị vòng quanh đó theo thứ tự từđiển: abanan anaban ananab banana (*) nabana nanaba Bước 3:
Gọi k là vị trí của từ ban đầu trong dãy hoán vị vòng quanh sau khi đã sắp xếp (ởđây k là 4). Lấy của mỗi hoán vị vòng quanh (theo đúng thứ tự sau khi đã sắp xếp theo thứ tự từđiển) một ký tự
cuối và ghép thành một từ W' (ởđây W' = 'nnbaaa') Ta gọi cặp (W', k) là mã công khai của từ W.
Yêu cầu:
Viết chương trình đọc file văn bản DECODE.INP gồm nhiều cặp dòng: Cứ hai dòng liên tiếp chứa một mã công khai: dòng 1 chứa từ W' và dòng 2 ghi số k. Tương ứng với mỗi cặp dòng đó, hãy giải mã và ghi vào file văn bản DECODE.OUT một dòng chứa từ W là từ đã giải mã ra
được.
Ràng buộc dữ liệu: Các từđược cho luôn khác rỗng, chỉ gồm các chữ cái in thường và có độ dài không quá 10000. Mã công khai luôn được cho đúng đắn.
Ví dụ:
DECODE.INP DECODE.OUT DECODE.INP DECODE.OUT nnbaaa nnbaaa 4 Banana drtyeesya 8 lla 1 ym 1 ulbrteso 7 yesterday all my troubles seemed so far away