120
110. S HIU VÀ GIÁ TR
Xét tt c các hoán v ca dãy s t nhiên (1, 2, ..., n); (1 n 12).Gi s rng các hoán v được sp
xếp theo th t t đin.
Ví d vi n = 3, có 6 hoán v:
1. 1 2 3
2. 1 3 2
3. 2 1 3
4. 2 3 1
5. 3 1 2
6. 3 2 1
Vn đề đặt ra là: Cho trớc mt hoán v (a
1
, a
2
, ..., a
n
), hãy cho biết s th t q ca hoán v đó
ngợc li: Cho trớc mt s th t p (1
p
n!) hãy tìm dãy hoán v (b
1
, b
2
, ..., b
n
) mang s th
t p.
D liu: Vào t file vn bn PERMUTE.INP
Dòng 1: Cha n s a
1
, a
2
, ..., a
n
Dòng 2: Cha s p
Kết qu: Ghi ra file vn bn PERMUTE.OUT
Dòng 1: Ghi s q
Dòng 2: Ghi n s b
1
, b
2
, ..., b
n
Các s trên mt dòng ca Input / Output file ghi cách nhau ít nht mt du cách
Ví d:
PERMUTE.INP PERMUTE.OUT
2 1 3
4
3
2 3 1
121
111. PHÉP CO
Xét dãy s nguyên dương a = (a
1
, a
2
, ..., a
n
) (2 n 100; 1 a
i
100). Ban đầu y s được viết
theo th t t trái sang phi, t a
1
ti a
n
.
Xét phép co R(i): Thay hai phn t liên tiếp a
i
a
i+1
thành (a
i
- a
i+1
). Sau đó dãy được đánh ch s
li: T trái sang phi, bt đầu t 1.
Ví d: dãy a = (5, 1, 4, 2, 3)
Vi phép co R(1) ta có a = (4, 4, 2, 3)
Vi phép co R(3) ta có a = (4, 4, -1)
Vi phép co R(2) ta có a = (4, 5)
Vi phép co R(1) ta có a = (-1).
Yêu cu: Cho trớc dãy a và s k. Hãy tìm mt dãy n - 1 phép co để biến dãy a thành (k). (Dãy a
và s k đợc cho để luôn tn ti ít nht mt phơng án)
D liu: Vào t file vn bn SEQ.INP
Dòng 1: Cha hai s n, k
Dòng 2: Cha n s a
1
, a
2
, ..., a
n
.
Kết qu: Ghi ra file vn bn SEQ.OUT
Gm n - 1 dòng, mi dòng ghi v trí ca mt phép biến đổi, các phép biến đổi phi được lit kê theo
đúng th t thc hin
Ví d
SEQ.INP SEQ.OUT
5 -1
5 1 4 2 3
4
3
1
1
122
112. CHA NGO C
Mt dãy du ngoc đúng là mt dãy các ký t "(" và ")" được định ngha đệ quy như sau:
1. () là mt dãy du ngoc đúng.
2. Nếu A là mt dãy du ngoc đúng thì (A) là dãy du ngoc đúng.
3. Nếu B và C là hai dãy du ngoc đúng thì BC là dãy du ngoc đúng.
Yêu cu: Cho mt xâu t S độ dài n ch gm các du "(" ")" (n chn, 2
n
200). Hãy
tìm xâu T tho mãn:
T là dãy du ngoc đúng độ dài n
T là "ging" S nht theo ngha: S v trí i mà T[i]
S[i] là cc tiu
D liu: Vào t file vn bn BRACKETS.INP, ch gm 1 dòng cha xâu S
Kết qu: Ghi ra file vn bn BRACKETS.OUT cng ch gm mt dòng ghi xâu T.
Ví d:
BRACKETS.INP BRACKETS.OUT
)())())())))
()((()))((()))
123
113. MÃ HOÁ BURROWS WHEELER
Cho mt t W độ dài n, người ta có mt cách mã hoá như sau: Ví d vi t banana.
Bước 1: Xét n hoán v vòng quanh ca W:
banana
ananab
nanaba
anaban
nabana
abanan
Bước 2: Sp xếp n hoán v vòng quanh đó theo th t t đin:
abanan
anaban
ananab
banana (*)
nabana
nanaba
Bước 3:
Gi k là v trí ca t ban đầu trong dãy hoán v vòng quanh sau khi đã sp xếp ( đây k là 4).
Ly ca mi hoán v vòng quanh (theo đúng th t sau khi đã sp xếp theo th t t đin) mt ký t
cui và ghép thành mt t W' ( đây W' = 'nnbaaa')
Ta gi cp (W', k) là mã công khai ca t W.
Yêu cu:
Viết chơng trình đọc file vn bn DECODE.INP gm nhiu cp dòng: C hai dòng liên tiếp
cha mt mã công khai: dòng 1 cha t W' và dòng 2 ghi s k. Tơng ng vi mi cp dòng đó,
hãy gii mã ghi vào file vn bn DECODE.OUT mt dòng cha t W t đã gii ra
đợc.
Ràng buc d liu: Các t được cho luôn khác rng, ch gm các ch cái in thường và đ 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
4
Banana drtyeesya
8
lla
1
ym
1
ulbrteso
7
emseed
6
so
2
fra
2
ywaa
1
yesterday
all
my
troubles
seemed
so
far
away
124
114. MNG RÚT GN
Mt h thng gm n máy tính được ni thành mt mng m kênh ni, mi kênh ni hai máy tính
trong mng, gia hai máy tính không quá 1 kênh ni. Các máy tính được đánh s t 1 đến n
các kênh ni được đánh s t 1 ti m. Vic truyn tin trc tiếp th thc hin được đối vi hai
máy kênh ni. Các kênh ni trong mng được chia ra làm ba loi 1, 2, 3. Ta nói gia hai y a
và b trong mng có đường truyn tin loi k (k{1, 2}) nếu tìm được dãy các máy a = v
1
, v
2
, ..., v
p
=
b tho mãn điu kin: gia hai máy v
i
v
i+1
hoc kênh ni loi k, hoc kênh ni loi 3, (i =
1, 2, ..., p - 1).
Yêu cu: Cn tìm cách loi b khi mng mt s nhiu nht kênh ni nhng vn đảm bo luôn
tìm đợc c đờng truyn tin loi 1 ln đờng truyn tin loi 2 gia hai máy bt k+ trong mng.
D liu: Vào t file vn bn NREDUCE.INP
Dòng đầu tiên cha hai s nguyên dương n, m (n 500; m 10000).
Dòng th i trong s m dòng tiếp theo cha ba s nguyên dương u
i
, v
i
, s
i
cho biết kênh truyn tin
th i là kênh loi s
i
ni hai máy u
i
và v
i
.
Kết qu: Ghi ra file vn bn NREDUCE.OUT
Dòng đầu tiên ghi r s kênh cn loi b. r = -1 nếu trong mng đã cho tn ti hai máy không
đường truyn tin loi 1 hoc li 2.
Nếu r > 0 thì r dòng tiếp theo, mi dòng ghi ch s ca mt kênh cn loi b.
Các s trên mt dòng ca Input/Output file ghi cách nhau ít nht mt du cách
Ví d:
NREDUCE.INP NREDUCE.OUT NREDUCE.INP NREDUCE.OUT
5 7
1 2 3
2 3 3
3 4 3
5 3 2
5 4 1
5 2 2
1 5 1
2
6
7
3 3
1 2 1
2 3 3
1 3 2
0