THAO TÁC ADN
Vấn đề này được thiết kế theo các bài trong kì thi OLP tin học sinh viên, giới hạn (subtask) được xếp ở cuối.
ADN là phân tử mang thông tin di truyền quy định mọi hoạt động sống. Cấu trúc của ADN gồm hai mạch polynucleotide xoắn quanh nhau theo một trục chung. Mỗi polynucleotide bao gồm một chuỗi các đơn vị xây dựng gọi là nucleotide, trong mỗi nucleotide chứa một trong các bazonito: A - Adenin, C - Cytosin, G - Guanin hoặc T - Thymin. Bazonito ở hai mạch xoắn được liên kết với nhau theo nguyên tắc bổ sung:
- A liên kết với T và ngược lại.
- G liên kết với C và ngược lại.
Tiến sĩ Hérec cùng nhóm nghiên cứu của ông vừa tạo ra một máy cắt gen mới, gọi là XAE. Để xác định công hiệu của XAE, ông chuẩn bị một số đoạn gen trong môi trường nội bào tái lập - trong môi trường này, các mạch ADN sẽ được tự động bổ sung. Do đó, XAE chỉ cần theo dõi và thực hiện các thao tác chỉnh sửa trên một mạch ADN (gọi là mạch \(A\)), mạch còn lại (gọi là mạch \(B\)) sẽ được tự động xây dựng dựa theo nguyên tắc bổ sung như trên.
Yêu cầu
Thực hiện các phép xử lý với quy cách chuẩn như sau của máy XAE:
\(ADDR\:X\) – Bổ sung vào cuối mạch \(A\) đoạn gen \(X\), mạch \(B\) sẽ thay đổi tương ứng. Nếu như mạch \(A\) chưa tồn tại (rỗng) thì coi đoạn gen hiện tại là mạch \(A\).
\(ADDL\:X\) – Bổ sung vào đầu mạch \(A\) đoạn gen \(X\), mạch \(B\) sẽ thay đổi tương ứng. Nếu như mạch \(A\) chưa tồn tại (rỗng) thì coi đoạn gen hiện tại là mạch \(A\).
\(REMOVE\:\:i\) - Bỏ bazonito ở vị trí \(i\) \((1 \le i)\) trong mạch \(A\) và mạch \(B\) (mạch \(A\) bắt đầu từ vị trí \(1\)). Nếu thao tác này không thực hiện được do \(i\) quá lớn thì thông báo lỗi.
\(STAT\:l\:r\) - Thống kê số lượng các loại bazonito từ vị trí \(l\) tới vị trí \(r\) \((1 \le l \le r)\) trên mạch \(B\) (mạch \(B\) bắt đầu từ vị trí \(1\)). Nếu thao tác này không thực hiện được do \(r\) quá lớn thì thông báo lỗi.
Dữ liệu
Vào từ thiết bị nhập chuẩn với định dạng như sau:
- Dòng đầu tiên chứa số nguyên \(q\) là số thao tác.
- Mỗi dòng trong \(q\) dòng tiếp theo chứa thông tin theo quy cách đã nêu về một thao tác cần thực hiện.
Kết quả
Đưa ra thiết bị xuất chuẩn:
- Đối với mỗi thao tác \(STAT\) (thực hiện được) bốn số nguyên trên một dòng lần lượt là số lượng bazonito A - T - G - C có trong đoạn mạch truy vấn.
- Đối với mỗi thao tác \(STAT\) hay \(REMOVE\) không thực hiện được dòng chữ "ERROR".
Ví dụ
Dữ liệu vào:
8
ADDR ATGC
ADDR AA
REMOVE 1
REMOVE 100
STAT 1 3
ADDL TAT
STAT 1 100
STAT 1 8
Kết quả ra:
ERROR
1 0 1 1
ERROR
3 3 1 1
Giải thích:
- Sau hai thao tác đầu tiên, mạch \(A\) là ATGCAA.
- Sau thao tác thứ ba: TGCAA, mạch ADN tương ứng là ACGTT.
- Sau thao tác thứ năm: TATTGCAA, mạch ADN tương ứng là ATAACGTT.
Giới hạn
Gọi \(L\) là tổng độ dài đoạn gen thêm vào trong các thao tác \(ADDL,\:ADDR\).
Subtask \(1\) \((30\%\) số điểm\()\): \(1 \le q, L \le 2000\).
Subtask \(2\) \((30\%\) số điểm\()\): \(1 \le q, L \le 2*10^5\), không có thao tác \(REMOVE\).
Subtask \(3\) \((40\%\) số điểm\()\): \(1 \le q, L \le 2*10^5\).
Comments