BOI 2020 - Viruses
Xem PDFỦy ban Nghiên cứu Virus Nhị phân đã phát hiện một cơ chế nhân bản của một họ virus lớn có mã di truyền là các dãy số \(0\) và \(1\). Mỗi virus bắt nguồn từ một gen duy nhất; để đơn giản, các gen được ký hiệu bằng các số nguyên từ \(0\) đến \(G-1\). Tại mỗi thời điểm, một virus là một dãy gen. Khi xảy ra đột biến, một gen trong dãy được thay bằng một dãy gen xác định theo bảng đột biến. Virus ngừng đột biến khi nó chỉ còn chứa các gen \(0\) và \(1\).
Chẳng hạn, xét bảng đột biến sau:
Một virus ban đầu chỉ gồm gen \(4\) có thể đột biến như sau. Phần được gạch dưới là dãy gen vừa được thay vào:
Hoặc virus có thể đột biến theo một cách khác:
Các kháng thể phát hiện virus bằng cách nhận ra sự xuất hiện của những đoạn liên tiếp nhất định gồm các số \(0\) và \(1\) trong mã của virus. Ví dụ, kháng thể phản ứng với đoạn \(\langle0\ 0\ 1\ 0\ 0\rangle\) sẽ phát hiện virus \(\langle0\ 0\ 1\ 0\ 0\ 1\ 0\ 1\rangle\), nhưng không phát hiện virus \(\langle0\ 1\ 0\ 1\ 0\ 0\ 1\ 0\ 1\rangle\).
Với mỗi gen từ \(2\) đến \(G-1\), các nhà khoa học muốn biết liệu tập kháng thể cho trước có đủ để phát hiện tất cả các virus có thể hình thành qua đột biến từ gen đó hay không. Nếu không, họ muốn biết độ dài của virus ngắn nhất không thể bị phát hiện.
Đôi khi các nhà khoa học không có kháng thể nào. Khi đó, hiển nhiên không virus nào có thể bị phát hiện, nên họ chỉ quan tâm đến độ dài của virus ngắn nhất có thể hình thành từ quá trình đột biến của gen đang xét.
Dữ liệu vào
Dòng đầu tiên chứa ba số nguyên \(G,N,M\), lần lượt là số gen, số dòng trong bảng đột biến và số kháng thể.
\(N\) dòng tiếp theo mô tả bảng đột biến. Mỗi dòng bắt đầu bằng hai số nguyên \(a,k\), tiếp theo là một dãy gồm \(k\) số nguyên \(b_1,b_2,\ldots,b_k\), biểu diễn quy tắc:
Mỗi số nguyên từ \(2\) đến \(G-1\) xuất hiện ít nhất một lần với vai trò \(a\) trong bảng.
\(M\) dòng tiếp theo mô tả các kháng thể. Mỗi dòng bắt đầu bằng số nguyên \(\ell\), tiếp theo là dãy gồm \(\ell\) số nguyên \(c_1,c_2,\ldots,c_\ell\), mô tả đoạn mã mà kháng thể nhận ra.
Dữ liệu ra
In đúng \(G-2\) dòng, lần lượt là đáp án cho các gen từ \(2\) đến \(G-1\).
Nếu mọi virus có thể hình thành qua đột biến từ gen đang xét đều bị phát hiện bởi tập kháng thể đã cho, in YES. Cũng in YES nếu không có virus nào có thể hình thành từ gen đó, tức là các dãy không bao giờ ngừng đột biến để trở thành một dãy chỉ gồm \(0\) và \(1\).
Ngược lại, in NO, theo sau bởi một số nguyên là độ dài nhỏ nhất của một virus không thể bị phát hiện. Trong mọi bộ dữ liệu, giá trị này được bảo đảm nhỏ hơn \(2^{63}\).
Ràng buộc
- \(G>2\), \(N\ge G-2\), \(M\ge0\).
- Với mỗi dòng của bảng đột biến: \(2\le a<G\), \(k\ge1\), \(0\le b_i<G\) với mọi \(1\le i\le k\).
- Tổng tất cả các giá trị \(k\) không vượt quá \(100\).
- Mỗi gen từ \(2\) đến \(G-1\) xuất hiện ít nhất một lần ở vế trái của một quy tắc đột biến.
- Với mỗi kháng thể: \(\ell\ge1\), \(0\le c_i\le1\) với mọi \(1\le i\le\ell\).
- Tổng tất cả các giá trị \(\ell\) không vượt quá \(50\).
- Mọi giá trị số trong đầu vào đều là số nguyên.
- Độ dài nhỏ nhất cần in, nếu tồn tại, nhỏ hơn \(2^{63}\).
- Giới hạn thời gian: \(0{,}7\) giây. Giới hạn bộ nhớ: \(256\) MiB.
Phân nhóm
- \(11\) điểm: không có kháng thể, tức \(M=0\).
- \(14\) điểm: \(N=G-2\).
- \(25\) điểm: có đúng một kháng thể, tức \(M=1\).
- \(32\) điểm: tổng tất cả các giá trị \(\ell\) không vượt quá \(10\).
- \(18\) điểm: không có ràng buộc thêm.
Ví dụ
Ví dụ 1
Input
6 6 2
2 2 0 1
3 3 2 0 0
3 2 1 3
4 4 0 3 1 2
5 2 2 1
5 1 5
2 1 1
5 0 0 1 0 0
Output
NO 2
NO 4
NO 9
YES
Kỳ thi:
- BOI 2020 - Ngày 2 (22 Tháng bảy, 2020)
Bình luận