IOI 2003 - Comparing Code
Xem PDFCông ty Racine Business Networks (RBN) kiện công ty Heuristic Algorithm Languages (HAL), cho rằng HAL đã lấy mã nguồn của RBN UNIX và đưa vào hệ điều hành mã nguồn mở HALnix.
Cả hai công ty đều dùng một ngôn ngữ lập trình có đúng một câu lệnh trên mỗi dòng, theo dạng STOREA = STOREB + STOREC. Tên biến đầu tiên bắt đầu ở cột đầu tiên; giữa tên biến và mỗi ký hiệu =, + có đúng một dấu cách. Một biến có thể xuất hiện nhiều lần trên cùng một dòng. Tên biến gồm từ 1 đến 8 chữ cái ASCII in hoa từ A đến Z.
RBN cho rằng HAL đã sao chép một đoạn gồm các dòng liên tiếp trong chương trình của RBN và chỉ thực hiện những thay đổi sau:
- Đổi tên biến để che giấu việc sao chép: trong cả đoạn, mọi lần xuất hiện của một biến được thay bằng cùng một tên mới. Tên mới có thể trùng tên cũ, nhưng hai biến khác nhau không được đổi thành cùng một biến.
- Có thể đổi chỗ hai toán hạng bên phải trên từng dòng:
STOREA = STOREB + STORECcó thể trở thànhSTOREA = STOREC + STOREB. - Không thay đổi thứ tự các dòng.
Cho mã nguồn của cả RBN và HAL, hãy tìm độ dài lớn nhất của một đoạn gồm các dòng liên tiếp trong chương trình HAL có thể thu được từ một đoạn gồm các dòng liên tiếp trong chương trình RBN bằng những thay đổi trên. Hai đoạn không nhất thiết bắt đầu tại cùng một số dòng.
Dữ liệu vào
Trong bản luyện tập, đọc dữ liệu từ đầu vào chuẩn. Tệp đầu vào trong đề gốc có tên code.in.
- Dòng đầu chứa hai số nguyên \(R,H\), với \(1\le R,H\le1000\), lần lượt là số dòng mã nguồn của RBN và HAL.
- \(R\) dòng tiếp theo là chương trình của RBN.
- \(H\) dòng tiếp theo là chương trình của HAL.
Dữ liệu ra
Ghi ra đầu ra chuẩn một số nguyên trên một dòng: độ dài lớn nhất của đoạn liên tiếp mà HAL có thể đã sao chép và biến đổi từ RBN. Tệp đầu ra trong đề gốc có tên code.out.
Ràng buộc
Giới hạn thời gian: 2 giây CPU. Giới hạn bộ nhớ: 64 MiB.
Phân nhóm
Có 20 bộ dữ liệu, mỗi bộ tối đa 5 điểm. Mỗi bộ chỉ được điểm khi kết quả đúng; không có điểm thành phần trong một bộ dữ liệu.
Ví dụ
Ví dụ 1
Input
4 3
RA = RB + RC
RC = D + RE
RF = RF + RJ
RE = RF + RF
HD = HE + HF
HM = HN + D
HN = HA + HB
Output
2
Giải thích
Dòng 1–2 của RBN tương ứng với dòng 2–3 của HAL khi đổi tên RA thành HM, RB thành D, RC thành HN, D thành HA, RE thành HB. Không có hai đoạn tương ứng dài từ 3 dòng trở lên.
Nguồn
Kỳ thi:
- IOI 2003 - Ngày 1 (18 Tháng 8., 2003)
Bình luận