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] Phát hiện khối dữ liệu bị hỏng qua checksum

    Khi truyền một tệp lớn qua mạng (kiểu giao thức rsync), tệp thường được chia thành nnn khối theo thứ tự. Bên gửi tính trước checksum SHA-256 cho từng khối gốc: R1,R2,…,RnR_1, R_2, \ldots, R_nR1​,R2​,…,Rn​. Sau khi nhận, bên nhận cần xác định những khối nào đã bị hỏng (do lỗi đường truyền) bằng cách so sánh lại checksum.

    Cho danh sách checksum tham chiếu R1,…,RnR_1, \ldots, R_nR1​,…,Rn​ (SHA-256, dạng hex) và nội dung nnn khối thực nhận được B1,…,BnB_1, \ldots, B_nB1​,…,Bn​ (đúng thứ tự tương ứng, mỗi khối là một dòng, có thể là chuỗi rỗng). Với mỗi iii, tính SHA256(Bi)\text{SHA256}(B_i)SHA256(Bi​) và so sánh với RiR_iRi​:

    • Nếu khớp: khối iii nguyên vẹn.
    • Nếu không khớp: khối iii được xem là bị hỏng.

    Hãy xác định số lượng khối bị hỏng và chỉ số (1-indexed) của chúng theo thứ tự tăng dần.

    Ví dụ: n=3n = 3n=3, các khối 1 và 3 khớp checksum, khối 2 không khớp → in ra 1 (số khối hỏng) và dòng tiếp theo 2 (chỉ số khối hỏng).

    • Định dạng đầu vào:
      • Dòng 1: số nguyên nnn (0≤n≤10000 \le n \le 10000≤n≤1000).
      • nnn dòng tiếp theo: checksum tham chiếu R1,…,RnR_1, \ldots, R_nR1​,…,Rn​ (mỗi dòng một chuỗi hex 64 ký tự).
      • nnn dòng tiếp theo: nội dung khối thực nhận B1,…,BnB_1, \ldots, B_nB1​,…,Bn​ (mỗi khối một dòng, có thể rỗng).
    • Định dạng đầu ra:

      In ra hai dòng:

      • Dòng 1: số nguyên mmm — số lượng khối bị hỏng.
      • Dòng 2: danh sách chỉ số (1-indexed, tăng dần) các khối bị hỏng, cách nhau bởi một khoảng trắng; nếu m=0m = 0m=0 thì dòng này để rỗng.

    Ví dụ:

    Đầu vào:

    0
    

    Đầu ra:

    0
    
    

    Đầu vào:

    1
    62e2f4574144e4942f3b04c35f89e72aedf885983b5a2f267fd60406f4d2aaa2
    blockA
    

    Đầu ra:

    0
    
    

    Đang tải editor...