| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2016 - JOIRIS | 100 (p) | 1.0s | 256M |
| 2 | JOI 2016 - Selling RNA Strands | 100 (p) | 1.5s | 2G |
| 3 | JOI 2016 - Skyscraper | 100 (p) | 2.0s | 512M |
Ông JOI rất thích trò chơi “JOIRIS”, nhưng lại không giỏi chơi trò này. JOIRIS được chơi trên một bảng hình chữ nhật chia thành các ô vuông. Bảng có chiều rộng \(N\) ô và chiều cao đủ lớn. Ô ở cột thứ \(i\) từ trái sang và hàng thứ \(j\) từ dưới lên được ký hiệu là \((i,j)\). Trong suốt trò chơi, mỗi ô hoặc chứa một khối vuông, hoặc để trống.
Trò chơi diễn ra như sau:
Đầu tiên, người chơi chọn đặt mảnh ghép theo chiều dọc hoặc chiều ngang.
Nếu đặt theo chiều dọc, người chơi chọn một số nguyên \(x\) với \(1\le x\le N\), rồi đặt mảnh ghép thẳng đứng ngay phía trên khối vuông cao nhất trong cột \(x\). Cụ thể, gọi \(y\) là số nguyên lớn nhất sao cho ô \((x,y)\) chứa khối vuông; nếu cột này trống thì lấy \(y=0\). Đặt một khối vuông vào mỗi ô sau:
Nếu đặt theo chiều ngang, người chơi chọn một số nguyên \(x\) với \(1\le x\le N-K+1\), rồi đặt mảnh ghép nằm ngang ngay phía trên khối vuông cao nhất trong các cột từ \(x\) đến \(x+K-1\). Cụ thể, gọi \(y\) là số nguyên lớn nhất sao cho tồn tại \(i\) (\(1\le i\le K\)) mà ô \((x+i-1,y)\) chứa khối vuông; nếu tất cả các cột này đều trống thì lấy \(y=0\). Đặt một khối vuông vào mỗi ô sau:
Sau mỗi lần đặt, nếu cả \(N\) ô của một hàng đều chứa khối vuông, tất cả các khối vuông trong hàng đó biến mất. Sau đó, mỗi khối vuông phía trên hàng vừa xóa dịch xuống một ô. Nói cách khác, khi hàng \(y\) được lấp đầy, trạng thái của mọi ô \((i,j)\) với \(1\le i\le N\) và \(j\ge y\) được đồng thời thay bằng trạng thái của ô \((i,j+1)\). Nếu nhiều hàng cùng được lấp đầy, thực hiện việc xóa hàng theo thứ tự từ dưới lên.
Mục tiêu của JOIRIS là xóa hết các khối vuông trên bảng bằng không quá \(10\,000\) lần đặt mảnh ghép. Vì không giỏi trò chơi này, ông JOI không biết cách đạt được mục tiêu đó.
Cho trạng thái ban đầu của bảng và kích thước mảnh ghép, hãy xác định liệu có thể xóa hết các khối vuông trên bảng bằng không quá \(10\,000\) lần đặt hay không. Nếu có thể, hãy tìm một cách thực hiện.
Đọc từ đầu vào chuẩn:
Nếu không thể xóa hết các khối vuông bằng không quá \(10\,000\) lần đặt, in số nguyên -1 trên một dòng.
Ngược lại, in \(X+1\) dòng, trong đó \(X\) là số lần đặt mảnh ghép và \(0\le X\le 10\,000\):
1 x nếu đặt theo chiều dọc tại cột \(x\), với \(1\le x\le N\).2 x nếu đặt theo chiều ngang, bắt đầu tại cột \(x\), với \(1\le x\le N-K+1\).Trong mỗi dòng mô tả thao tác, hai số nguyên được ngăn cách bởi một dấu cách. Sau khi thực hiện tất cả các thao tác và xóa các hàng đầy theo quy tắc, bảng phải hoàn toàn trống. Có thể in bất kỳ dãy thao tác hợp lệ nào thỏa mãn giới hạn; không cần tối thiểu hóa \(X\). Bộ chấm chỉ đánh giá đúng hoặc sai, không cho điểm dựa trên số lần đặt.
Ví dụ 1
4 2
1
0
1
2
4
2 2
1 1
2 3
1 2
Ví dụ 2
3 2
2
0
1
3
1 2
1 3
2 1
Ví dụ 3
2 2
0
1
-1
Ví dụ 4
5 3
1
0
1
0
1
9
1 4
1 5
2 1
2 1
2 2
1 1
1 2
2 3
2 3
Bạn có biết Công ty TNHH Just Odd Inventions không? Công việc kinh doanh của công ty này là tạo ra “những phát minh kỳ lạ”. Trong bài này, ta gọi tắt là công ty JOI.
Gần đây, lợi nhuận của công ty JOI sụt giảm nghiêm trọng vì chỉ kinh doanh những phát minh kỳ lạ. Công ty dự định bắt đầu một hoạt động kinh doanh mới: bán dung dịch chứa các chuỗi RNA. Một chuỗi RNA được xem là một xâu chỉ gồm bốn ký tự A, G, C, U. Công ty JOI đã chuẩn bị \(N\) chuỗi RNA để kinh doanh.
Công ty nhận đơn hàng từ khách hàng theo hình thức sau: khách hàng chọn hai xâu \(P,Q\). Trong số các chuỗi RNA đã chuẩn bị, công ty bán những chuỗi có \(|P|\) ký tự đầu tiên là \(P\) và \(|Q|\) ký tự cuối cùng là \(Q\). Ở đây, \(|P|\) và \(|Q|\) lần lượt là độ dài của \(P\) và \(Q\).
Có bao nhiêu chuỗi RNA mà công ty đã chuẩn bị thỏa mãn điều kiện của từng đơn hàng?
Cho thông tin về các chuỗi RNA đã chuẩn bị và các đơn hàng của khách hàng, hãy tính số chuỗi RNA thỏa mãn điều kiện của mỗi đơn hàng.
Đọc từ đầu vào chuẩn:
In \(M\) dòng ra đầu ra chuẩn. Dòng thứ \(j\) (\(1\le j\le M\)) chứa một số nguyên: số chuỗi RNA đã chuẩn bị thỏa mãn điều kiện của đơn hàng thứ \(j\).
A, G, C, U.Các tổng độ dài thỏa mãn riêng từng giới hạn sau:
Các tổng độ dài thỏa mãn riêng từng giới hạn sau:
Không có ràng buộc bổ sung.
Ví dụ 1
2 3
AUGC
AGC
G C
AU C
A C
0
1
2
Trong ví dụ này, công ty JOI đã chuẩn bị hai chuỗi RNA AUGC và AGC.
0 vì không có chuỗi RNA nào có ký tự đầu tiên là G và ký tự cuối cùng là C.1 vì chỉ có chuỗi RNA AUGC bắt đầu bằng AU và kết thúc bằng C.2 vì cả hai chuỗi RNA AUGC và AGC đều có ký tự đầu tiên là A và ký tự cuối cùng là C.Ví dụ 2
3 3
AA
AA
AGA
AA AA
AG GA
AG GA
2
1
1
Lưu ý rằng các chuỗi RNA giống nhau hoặc các đơn hàng giống nhau có thể xuất hiện nhiều lần. Ngoài ra, phần đầu và phần cuối được chọn trong một đơn hàng có thể chồng lấn nhau. Chẳng hạn, chuỗi RNA AGA được xem là bắt đầu bằng AG và kết thúc bằng GA.
Ví dụ 3
8 7
GCGCUACCCCAACACAAGGCAAGAUAUA
G
GGAC
GCGG
U
GCGCUACCCCAACACAAGGCAAGAUGGUC
GCCG
GCGCUGA
GCGCUACCC A
GCGCUACCCC AC
GCG C
GCGC A
G G
G C
G GGA
1
0
1
2
3
2
0
Kỳ thi Olympic Tin học Quốc tế sẽ được tổ chức tại thành phố Tsukuba, Nhật Bản. Để chuẩn bị cho IOI, chúng ta dự định xây dựng các tòa nhà chọc trời trên đường phố chính của thành phố. Vì muốn tạo ra một địa điểm tham quan mới, các tòa nhà phải thỏa mãn những điều kiện sau.
Có \(N\) tòa nhà được xây dọc theo một đường thẳng trên đường phố chính. Chiều cao của chúng là \(A_1,A_2,\ldots,A_N\), đôi một khác nhau. Thứ tự của các tòa nhà chưa được quyết định, nên ta có thể hoán vị các chiều cao này tùy ý.
Chúng ta sẽ trang trí các tòa nhà để chào đón IOI. Do giới hạn về vật liệu trang trí, tổng các trị tuyệt đối của hiệu chiều cao giữa hai tòa nhà kề nhau phải không vượt quá \(L\). Nói cách khác, nếu chiều cao các tòa nhà theo thứ tự nhìn từ một đầu của đường phố là \(f_1,f_2,\ldots,f_N\), thì phải có:
Ở đây, \(|x|\) là giá trị tuyệt đối của \(x\).
Có bao nhiêu hoán vị của các tòa nhà thỏa mãn điều kiện trên?
Cho số tòa nhà \(N\), chiều cao của chúng và giới hạn \(L\), hãy tính số hoán vị thỏa mãn điều kiện. Vì kết quả có thể rất lớn, hãy in phần dư của kết quả khi chia cho \(1\,000\,000\,007\).
Đọc từ đầu vào chuẩn:
In một số nguyên trên một dòng ra đầu ra chuẩn: phần dư của số hoán vị thỏa mãn điều kiện khi chia cho \(1\,000\,000\,007\).
Ví dụ 1
4 10
3 6 2 9
6
Có tất cả \(24\) hoán vị. Trong số đó, có \(6\) hoán vị mà tổng các trị tuyệt đối của hiệu chiều cao giữa hai tòa nhà kề nhau không vượt quá \(10\):
Với \((f_1,f_2,f_3,f_4)=(2,3,6,9)\):
Với $(f_1,f_2,f_3,f_4)=(2,3,9,6)$:
Với $(f_1,f_2,f_3,f_4)=(3,2,6,9)$:
Với $(f_1,f_2,f_3,f_4)=(6,9,3,2)$:
Với $(f_1,f_2,f_3,f_4)=(9,6,2,3)$:
Với $(f_1,f_2,f_3,f_4)=(9,6,3,2)$:
Ví dụ 2
8 35
3 7 1 5 10 2 11 6
31384