Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [An toàn thông tin] Mã hóa Vigenère giữ định dạng gốc

    Trong thực tế, văn bản cần mã hóa thường có cả chữ hoa, chữ thường, khoảng trắng và dấu câu. Một biến thể thường dùng của mật mã Vigenère chỉ mã hóa các ký tự chữ cái (A-Z, a-z) và giữ nguyên mọi ký tự không phải chữ cái (khoảng trắng, chữ số, dấu câu, ...) tại đúng vị trí của nó; những ký tự này cũng không được tính vào dòng khóa (con trỏ khóa chỉ dịch chuyển khi gặp một ký tự chữ cái). Chữ hoa/thường của ký tự đầu ra được giữ nguyên như ký tự đầu vào tại vị trí đó.

    Cho bản rõ PPP (có thể chứa chữ hoa, chữ thường, chữ số, khoảng trắng, dấu câu) và khóa KKK chỉ gồm chữ cái (không phân biệt hoa/thường, được quy về chữ in hoa khi tính toán). Gọi a0,a1,…a_0, a_1, \dotsa0​,a1​,… là dãy các ký tự chữ cái của PPP theo đúng thứ tự xuất hiện. Ký tự chữ cái thứ jjj được mã hóa bằng ký tự khóa Kj mod ∣K∣K_{j \bmod |K|}Kjmod∣K∣​ theo công thức Vigenère chuẩn (cộng theo giá trị không phân biệt hoa thường, rồi trả kết quả về đúng dạng hoa/thường của ký tự gốc). Các ký tự không phải chữ cái được chép nguyên vào đúng vị trí của nó trong chuỗi kết quả.

    Ví dụ: P=P=P= Attack at Dawn!, K=K=K= LEMON → kết quả là Lxfopv ef Rnhr! (khoảng trắng và dấu ! giữ nguyên vị trí; chữ A hoa được mã hóa vẫn ra chữ hoa L, các chữ thường mã hóa ra chữ thường).

    • Định dạng đầu vào:

      Dòng 1: chuỗi PPP (1≤∣P∣≤20001 \le |P| \le 20001≤∣P∣≤2000) — có thể gồm chữ hoa, chữ thường, chữ số, dấu cách, dấu câu (dòng này có thể chứa khoảng trắng). Dòng 2: chuỗi khóa KKK (1≤∣K∣≤501 \le |K| \le 501≤∣K∣≤50), chỉ gồm chữ cái (hoa hoặc thường).

    • Định dạng đầu ra:

      Một dòng duy nhất: chuỗi đã mã hóa, cùng độ dài với PPP; các ký tự không phải chữ cái được giữ nguyên đúng vị trí; hoa/thường tại mỗi vị trí chữ cái được giữ giống như trong PPP.

    Ví dụ:

    Đầu vào:

    Attack at Dawn!
    LEMON
    

    Đầu ra:

    Lxfopv ef Rnhr!
    

    Đầu vào:

    a
    A
    

    Đầu ra:

    a
    

    Đang tải editor...