Nộp bài | Các bài nộp | Làm tốt nhất | Về danh sách bài |
P186PROI - ROUND 6I - Mã hóa dịch bit |
Lúi nay chuẩn bị thi môn mật mã học, câu đang ôn thi rất miệt mài. Mã hóa dịch vòng là thuật toán mã hóa được phát biểu như sau:
- Cho một xâu nhị phân có độ dài N. Ta thực hiện dịch xâu nhị phân này qua phải K lần (xâu nhị phân giữ nguyên chỉ thay đổi vị trí là được dịch sang phải). Sau đó ta được K xâu nhị phân giống nhau nhưng đặt lần lượt vào các vị trí trượt cách nhau 1 ô. Tương ứng với mỗi ô. Ta sẽ xor các bit lại với nhau để được một xâu nhị phân mới có độ dài N’ = N + K – 1. Ví dụ, dãy nhị phân ban đầu là 1101001 ta thực thực mã hóa với k = 3:
1101001
1101001
1101001
----------------
100011111
Lúi rất hứng thú với loại mã hóa này, và câu muốn tìm xem có cách nào giải mã thật nhanh xâu nhị phân sau khi đã mã hóa hay không. Các bạn hãy giúp Lúi nhé.
Input
Dòng đầu gồm 2 số nguyên N và K (1 <= N, K <= 106).
Dòng thứ hai gồm 1 xâu nhị phân có độ dài N’ = N + K – 1 biểu diễn xâu nhị phân sau khi mã hóa.
Output
Xâu nhị phân có độ dài N là xâu nhị phân ban đầu trước khi mã hóa. Nếu không tìm được xâu nhị phân ban đầu, in ra -1.
Example
Input: 7 3
100011111 Output: 1101001
Được gửi lên bởi: | adm |
Ngày: | 2018-04-06 |
Thời gian chạy: | 1s |
Giới hạn mã nguồn: | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Ngôn ngữ cho phép: | ASM32-GCC ASM32 ASM64 MAWK BC C CSHARP C++ 4.3.2 CPP CPP14 COFFEE LISP sbcl DART FORTH GO JAVA JS-RHINO JS-MONKEY KTLN OCT PAS-GPC PAS-FPC PERL PERL6 PROLOG PYTHON PYTHON3 PY_NBC R RACKET SQLITE SWIFT UNLAMBDA |