Thứ Sáu, 6 tháng 11, 2015

TÌM KHOÁ


Phương pháp mã hoá đơn giản nhất trong mật mã học là thay thế từng ký tự của chuỗi cần mã hoá bằng một ký tự tương ứng trong bảng chữ cái theo khoá k=k1k2…k26 là một hoán vị của 26 chữ cái thường trong bảng chữ cái tiếng Anh, trong đó k1 được thay bằng ‘a’, k2 được thay bằng ‘b’
Chẳng hạn với khoá k=dbocefghijklmnapqrstuvwxyz thì chuỗi ‘cat’ được mã hoá thành ‘dot’ trong đó ‘c’ thay bằng ‘d’, ‘a’ thay bằng ‘o’ và ‘t’ thay bằng ‘t’.
Yêu cầu: cho n chuỗi ký tự s1, s2,…,sn. Hãy tìm một khoá k để mã hoá s1, s2,…,sn thành t1, t2,…,tn sao cho t1, t2,…,tn tạo thành dãy có thứ tự từ điển (t1<= t2<=…<=tn)
Dữ liệu: vào từ tệp văn bản KEY.INP
+ Dòng đầu tiên chứa số nguyên dương n (1<n<=105)
+ Dòng thứ i trong n dòng tiếp theo chứa chuỗi ký tự latin in thường si có độ dài không quá 100
Kết quả: ghi ra tệp văn bản KEY.OUT khoá k gồm 26 ký tự latin là một hoán vị của bảng chữ cái latin in thường. Nếu không tồn tại thì phải ghi thông báo ‘No Solution’.
Ví dụ:
KEY.INP
KEY.OUT
5
dog
donky
duck
cat
goose
docugnbefhijklmpqrstvwxyaz
Giải thích: Với khoá k= docugnbefhijklmpqrstvwxyaz thì các chuỗi sau phép biến đổi có thứ tự từ điển:
                  dog   ->  abe
                  donky ->   abfmhx
                  duck  ->   adcm
                  cat   ->   cyt
                  goose ->   ebbsh


Không có nhận xét nào: