| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | BOI 2011 - Chăm sóc cây | 100 (p) | 3.0s | 256M |
| 2 | BOI 2011 - Kem | 100 (p) | 3.0s | 256M |
| 3 | BOI 2011 - Bật đèn | 100 (p) | 3.0s | 256M |
| 4 | BOI 2011 - Kho báu và người Viking | 100 (p) | 3.0s | 256M |
Egon chăm sóc một khu vườn có \(N\) cây táo. Công việc của anh gồm hai loại: bón phân cho cây và thống kê chiều cao của chúng.
Để bón phân, Egon có một số chai MegaBoostFertilizer. Khi được bón loại phân này, một cây lập tức cao thêm một xentimét. Mỗi chai có dung lượng \(c_i\), là số cây có thể được bón bằng chai đó, và chỉ dùng được cho những cây cao ít nhất \(h_i\) xentimét. Vì muốn tất cả cây đều cao nhất có thể, Egon luôn bón cho \(c_i\) cây thấp nhất trong số những cây cao ít nhất \(h_i\) xentimét.
Khi thống kê, Egon cần biết số cây có chiều cao nằm trong một khoảng cho trước. Anh rất bận chăm sóc khu vườn, nên nhờ bạn viết chương trình nhận danh sách công việc và tính các kết quả thống kê giúp anh.
Dòng đầu tiên chứa hai số nguyên \(N\) và \(M\), lần lượt là số cây trong vườn và số công việc. Dòng thứ hai chứa \(N\) số nguyên thuộc đoạn \([1,N]\), mô tả chiều cao ban đầu của các cây, tính bằng xentimét.
\(M\) dòng tiếp theo mô tả các công việc theo thứ tự thời gian. Mỗi dòng bắt đầu bằng ký tự \(t_i\), là F hoặc C:
F, tiếp theo là hai số nguyên \(c_i\) và \(h_i\). Egon bón phân cho \(c_i\) cây thấp nhất trong số những cây cao ít nhất \(h_i\) xentimét. Nếu có ít hơn \(c_i\) cây đủ cao, anh bón cho tất cả những cây đó rồi bỏ chai đi, dù vẫn còn phân trong chai.C, tiếp theo là hai số nguyên \(\mathit{min}_i\) và \(\mathit{max}_i\). Egon cần đếm số cây có chiều cao \(H\) thỏa mãn \(\mathit{min}_i \le H \le \mathit{max}_i\).Với mỗi công việc loại C, in một dòng chứa số cây táo có chiều cao thuộc khoảng yêu cầu. Thứ tự các kết quả phải trùng với thứ tự những công việc loại C trong dữ liệu vào.
F không vượt quá \(7\,000\).Ví dụ 1
5 7
1 3 2 5 2
F 2 1
C 3 6
F 2 3
C 6 8
F 2 1
F 2 2
C 3 5
3
0
5
Rasmus và các bạn đang đi nghỉ ở Ý. Vì trời nóng, họ quyết định mua kem. Cửa hàng có \(N\) vị kem, được đánh số từ \(1\) đến \(N\). Tuy nhiên, một số cặp vị không nên kết hợp với nhau vì sẽ có vị khó chịu. Rasmus muốn biết có bao nhiêu cách chọn ba vị kem khác nhau sao cho không có cặp nào bị cấm. Thứ tự các vị được chọn không quan trọng.
Dòng đầu tiên chứa hai số nguyên không âm \(N\) và \(M\), lần lượt là số vị kem và số cặp vị bị cấm kết hợp.
Mỗi dòng trong \(M\) dòng tiếp theo chứa số hiệu của hai vị kem khác nhau, mô tả một cặp bị cấm. Không có cặp bị cấm nào xuất hiện hai lần.
In một số nguyên duy nhất: số cách chọn thỏa mãn yêu cầu.
Ví dụ 1
5 3
1 2
3 4
1 3
3
Có 5 vị kem và 3 cặp bị cấm. Vị 1 không được kết hợp với vị 2 hoặc vị 3; vị 3 cũng không được kết hợp với vị 4. Chỉ còn ba cách chọn ba vị khác nhau: \((1,4,5)\), \((2,3,5)\) và \((2,4,5)\).
Casper đang thiết kế một mạch điện trên một tấm bảng hình chữ nhật gồm \(N\) hàng và \(M\) cột ô vuông. Mỗi ô chứa một miếng vuông có dây dẫn nối hai góc đối diện của nó.
Nguồn điện được nối với góc trên bên trái của bảng, còn bóng đèn được nối với góc dưới bên phải. Đèn chỉ sáng khi có một đường đi gồm các dây dẫn nối nguồn điện với bóng đèn. Để làm đèn sáng, có thể xoay một số miếng vuông, mỗi miếng \(90^\circ\) theo một trong hai chiều.
Hãy viết chương trình tìm số miếng vuông ít nhất cần xoay để làm đèn sáng.
Dòng đầu tiên chứa hai số nguyên \(N\) và \(M\), là kích thước của bảng.
Mỗi dòng trong \(N\) dòng tiếp theo chứa \(M\) ký tự \ hoặc /, biểu diễn hướng của dây dẫn nối hai góc đối diện trên miếng vuông tương ứng.
In đúng một dòng. Nếu có thể làm đèn sáng, in một số nguyên duy nhất: số miếng vuông ít nhất cần xoay. Nếu không thể, in chuỗi NO SOLUTION.
Bạn có một bản đồ kho báu được chia thành lưới \(N\times M\). Mỗi ô là biển hoặc một phần của đảo. Bản đồ còn đánh dấu kho báu và một chiếc thuyền Viking của địch chiếm một ô biển. Để tiện theo dõi, bạn cũng đã đánh dấu vị trí của mình.
Bạn cần định trước một lộ trình cố định để lấy kho báu. Lộ trình bắt đầu tại vị trí của bạn, kết thúc tại kho báu và gồm một dãy bước đi. Mỗi bước, bạn chỉ được đi sang một ô kề cạnh theo chiều ngang hoặc chiều dọc không thuộc đảo. Nhưng hãy cẩn thận: thuyền Viking có thể đuổi theo bạn bằng những bước đi cùng loại! Sau mỗi bước đi của bạn theo lộ trình, thuyền Viking có thể đi một bước hoặc đứng yên. Bước đi của bạn và phản ứng của thuyền Viking tạo thành một lượt.
Sau mỗi lượt, lần lượt kiểm tra:
Hãy xác định liệu có thể định trước một lộ trình cố định giúp bạn lấy được kho báu mà không bị giết, bất kể thuyền Viking di chuyển như thế nào hay không.
Dòng đầu tiên chứa hai số nguyên \(N\) và \(M\), là kích thước của bản đồ.
Mỗi dòng trong \(N\) dòng tiếp theo chứa \(M\) ký tự. Mỗi ký tự mô tả một ô: . là biển, I là một phần của đảo, V là thuyền Viking, Y là vị trí của bạn, và T là kho báu. Mỗi ký tự V, Y và T xuất hiện đúng một lần.
In YES nếu có thể định trước một lộ trình để lấy được kho báu theo yêu cầu; ngược lại, in NO.
Ví dụ 1
5 7
Y.....V
..I....
..IIIII
.......
...T...
YES
Lộ trình sau giúp bạn lấy được kho báu: xuống, xuống, xuống, phải, phải, phải, xuống.
Ví dụ 2
5 7
Y....V.
..I....
..IIIII
.......
...T...
NO
Không có lộ trình nào đến kho báu mà bạn có thể sống sót.
Ví dụ 3
2 3
.YT
VII
NO
Không có lộ trình nào đến kho báu mà bạn có thể sống sót.