P142SUMG - ROUND 2G - Mã hóa

Link Sub: http://www.spoj.com/PTIT/problems/P142SUMG/
Người Gửi: Sai

  • Problem:

Mã hóa là một bước quan trọng trong việc truyền thông tin. Một trong những thuật toán đơn giản đó là dịch vòng tất cả các kí tự của từ mã (nội dung cần mã hóa) sang phải d kí tự. Chẳng hạn với d = 5, kí tự ‘A’ được mã hóa bằng ‘F’, ‘B’ bằng ‘G’, ..., ‘Z’ bằng ‘E’.  
Với một nội dung đã được mã hóa, để giải mã, người ta sẽ tìm khoảng cách dịch d và sau đó dịch ngược lại nội dung sang trái d kí tự. Khoảng cách d này được tính bằng số bước dịch sang phải từ chữ cái 'E' đến chữ cái được sử dụng nhiều nhất trong nội dung đã được mã hóa.  
Cho biết nội dung sau khi được mã hóa, các bạn hãy khôi phục lại từ mã ban đầu?
Input
Dòng đầu tiên là số lượng bộ test T (T <= 100).  
Mỗi bộ test là một nội dung đã được mã hóa, gồm nhiều chuỗi các chữ cái in hoa nằm trên một dòng (<= 1000 kí tự).
Output
Với mỗi test, in ra khoảng cách d và nội dung từ mã ban đầu. Nếu không giải mã được vì có nhiều giá trị d, in ra “NOT POSSIBLE”.
Example:
Input
3
RD TQIJW GWTYMJWX INFWD JSYWNJX ZXJ F XNRUQJ JSHWDUYNTS YJHMSNVZJ
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
XVIDRE TFCCVXZRKV GIFXIRDDZEX TFEKVJK
Output:
5 MY OLDER BROTHERS DIARY ENTRIES USE A SIMPLE ENCRYPTION TECHNIQUE
10 JXU GKYSA RHEMD VEN ZKCFI ELUH JXU BQPO TEW
NOT POSSIBLE

  • Solution:

- Các bước làm: + Nhập vào một xâu có dấu cách. + Đếm kí tự xuất hiện nhiều nhất bằng cách dùng mảng đánh dấu. (Nếu nhiều kí tự có cùng max thì in NOT POSSIBLE). + Tìm khoảng dịch d. (*Chú ý đây là dịch phải: VD: E->B thì phải dịch: E->Z->A->B); + Dịch các kí tự với khoảng d. (*Dịch phải là mã hóa còn dịch trái là đọc xâu).

  • Code:

C++:



JAVA:


Share this

Related Posts

Previous
Next Post »