IOI 2003 - Comparing Code

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2300 (p) Thời gian: 2.0s Bộ nhớ: 64M Input: bàn phím Output: màn hình

Cô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 + STOREC có thể trở thành STOREA = 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

Đề gốc IOI 2003. Bảng tổng quan ngày 1.

Tệp

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: