| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2016 - Employment | 100 (p) | 5.0s | 512M |
| 2 | JOI 2016 - Sandwich | 100 (p) | 5.0s | 256M |
| 3 | JOI 2016 - Toilets | 100 (p) | 1.0s | 256M |
Bạn có biết công ty Just Odd Inventions không? Công việc của công ty này là tạo ra “những phát minh kỳ lạ” (just odd inventions). Sau đây, ta gọi tắt công ty này là JOI.
Để mở rộng hoạt động kinh doanh, công ty JOI quyết định tuyển thêm nhân viên.
Có \(N\) ứng viên, được đánh số từ \(1\) đến \(N\). Mỗi ứng viên có một số nguyên gọi là điểm đánh giá.
Trong đợt tuyển dụng này, công ty sẽ tuyển tất cả các ứng viên có điểm đánh giá không nhỏ hơn một ngưỡng nhất định. Những nhân viên mới được tuyển sẽ được chia thành các nhóm sao cho thỏa mãn điều kiện sau:
Là người phụ trách nhân sự của công ty JOI, bạn cần ước tính số nhóm được tạo ra trong đợt tuyển dụng này bằng cách xử lý lần lượt \(M\) truy vấn. Truy vấn thứ \(j\) thuộc một trong hai loại sau:
Cho thông tin về \(M\) truy vấn, hãy viết chương trình tìm số nhóm ứng với mỗi truy vấn hỏi.
Đọc dữ liệu từ đầu vào chuẩn theo định dạng sau:
Với mỗi truy vấn hỏi, in ra đầu ra chuẩn số nhóm tương ứng trên một dòng, theo đúng thứ tự các truy vấn.
Tất cả dữ liệu vào thỏa mãn các điều kiện sau:
Ví dụ 1
5 4
8
6
3
5
4
1 5
2 4 1
1 5
1 3
2
1
2
Ví dụ 2
7 5
13
19
1
15
13
1
19
1 20
1 1
1 6
1 11
1 17
0
1
3
3
2
Dữ liệu vào của ví dụ 2 thỏa mãn các ràng buộc của subtask 2.
Ví dụ 3
10 5
8
10
15
2
2
8
5
12
11
4
1 5
2 8 4
1 12
2 5 11
1 16
2
1
0
JOI đang tham dự buổi giao lưu của IOI. Tại buổi giao lưu, những chiếc bánh sandwich được xếp trên một lưới ô vuông gồm \(R\) hàng và \(C\) cột. Mỗi chiếc bánh có dạng tam giác vuông cân với hai cạnh góc vuông có độ dài bằng cạnh của một ô. Trong mỗi ô có hai chiếc bánh được đặt sao cho hai cạnh huyền tiếp xúc với nhau. Hình dưới đây minh họa một cách xếp bánh.
Hình 1. Ví dụ về cách xếp bánh sandwich.
Không thể lấy một chiếc bánh nếu đồng thời thỏa mãn cả hai điều kiện sau:
Mọi chiếc bánh không thỏa mãn đồng thời hai điều kiện trên đều có thể được lấy đi.
Gọi trạng thái chưa có chiếc bánh nào được lấy đi là trạng thái ban đầu. Xuất phát từ trạng thái ban đầu, để lấy một chiếc bánh nào đó, có thể cần phải lấy một số chiếc bánh khác trước. Tùy vào cách xếp bánh, cũng có thể có những chiếc bánh không thể lấy được.
JOI muốn ăn cả hai chiếc bánh nằm trong cùng một ô, nhưng chưa quyết định sẽ chọn ô nào. Cậu muốn biết, xuất phát từ trạng thái ban đầu, số chiếc bánh ít nhất phải lấy để lấy được cả hai chiếc bánh trong một ô nhất định.
Cho cách xếp bánh, hãy viết chương trình xác định với mỗi ô xem có thể lấy được cả hai chiếc bánh trong ô đó bằng cách lần lượt lấy một số chiếc bánh từ trạng thái ban đầu hay không. Nếu có thể, hãy tìm số chiếc bánh ít nhất phải lấy. Số lượng này bao gồm cả hai chiếc bánh trong ô cần lấy.
Đọc dữ liệu từ đầu vào chuẩn theo định dạng sau:
N hoặc Z. Ký tự thứ \(j\) từ trái sang (\(1 \le j \le C\)) mô tả cách xếp bánh trong ô ở hàng thứ \(i\) từ trên xuống, cột thứ \(j\) từ trái sang. Hai ký tự N và Z lần lượt biểu diễn các cách xếp trong hình dưới đây.Hình 2. Cách xếp bánh sandwich trong mỗi ô: N ở bên trái, Z ở bên phải.
In ra đầu ra chuẩn \(R\) dòng. Dòng thứ \(i\) (\(1 \le i \le R\)) chứa \(C\) số nguyên, cách nhau bởi dấu cách. Số thứ \(j\) (\(1 \le j \le C\)) là số chiếc bánh ít nhất phải lấy để lấy được cả hai chiếc bánh trong ô ở hàng thứ \(i\) từ trên xuống, cột thứ \(j\) từ trái sang. Nếu không thể lấy được cả hai chiếc bánh trong ô đó, in ra \(-1\).
Tất cả dữ liệu vào thỏa mãn các điều kiện sau:
Ví dụ 1
2 3
NZN
ZZN
10 8 2
8 6 4
Cách xếp bánh trong ví dụ 1 tương ứng với Hình 1 trong đề bài.
Chẳng hạn, để lấy cả hai chiếc bánh trong ô ở hàng thứ \(2\) từ trên xuống, cột thứ \(2\) từ trái sang, có thể lấy bánh theo thứ tự sau:
Tổng cộng phải lấy \(6\) chiếc bánh. Đây là số lượng ít nhất, nên kết quả cho ô này là \(6\).
Ví dụ 2
2 2
NZ
ZN
-1 -1
-1 -1
Trong trường hợp này, không thể lấy được bất kỳ chiếc bánh nào.
Ví dụ 3
5 5
NZZZN
NNNZN
NNZNN
NZNNN
NZZZN
10 12 14 16 2
8 -1 -1 -1 4
6 -1 -1 -1 6
4 -1 -1 -1 8
2 16 14 12 10
Gần địa điểm thi của Kỳ thi Olympic Tin học Quốc tế tổ chức tại Nhật Bản có hai nhà vệ sinh. Một nhà vệ sinh chỉ dành cho nữ, còn nhà vệ sinh kia dùng chung cho cả nam và nữ. Nữ có thể sử dụng cả hai nhà vệ sinh, còn nam chỉ có thể sử dụng nhà vệ sinh chung.
Sau khi cuộc thi kết thúc, \(2N\) thí sinh xếp thành một hàng để sử dụng nhà vệ sinh. Mỗi thí sinh trong hàng là nam hoặc nữ. Các thí sinh lần lượt sử dụng nhà vệ sinh theo những quy tắc sau:
Mọi thí sinh đều mất \(1\) phút kể từ khi vào đến khi ra khỏi nhà vệ sinh. Có thể bỏ qua thời gian di chuyển đến nhà vệ sinh.
Bạn muốn sắp xếp lại hàng từ trước để đến thời điểm sau \(N\) phút, tất cả các thí sinh đều đã sử dụng xong nhà vệ sinh.
Với một cách sắp xếp lại hàng, mức độ bất mãn của mỗi thí sinh được định nghĩa như sau:
Định nghĩa này không tính những thay đổi thứ tự xảy ra khi các thí sinh thực sự vào nhà vệ sinh.
Trong số các cách sắp xếp lại hàng để tất cả thí sinh đều sử dụng xong nhà vệ sinh sau \(N\) phút, bạn muốn làm cho mức độ bất mãn lớn nhất của các thí sinh nhỏ nhất có thể.
Cho thông tin về \(2N\) thí sinh đang xếp hàng, hãy viết chương trình xác định xem có thể sắp xếp lại hàng để đến thời điểm sau \(N\) phút, tất cả mọi người đều đã sử dụng xong nhà vệ sinh hay không. Nếu có thể, hãy tìm giá trị nhỏ nhất có thể của mức độ bất mãn lớn nhất.
Đọc dữ liệu từ đầu vào chuẩn theo định dạng sau:
Từ dữ liệu này, xác định xâu \(X\) có độ dài \(2N\) biểu diễn hàng thí sinh như sau:
Ký tự thứ \(j\) từ trái sang của \(X\) (\(1 \le j \le 2N\)) cho biết giới tính của thí sinh thứ \(j\) tính từ đầu hàng: M là nam và F là nữ.
In ra đầu ra chuẩn trên một dòng giá trị nhỏ nhất có thể của mức độ bất mãn lớn nhất. Nếu không có cách sắp xếp lại hàng nào để tất cả mọi người đều sử dụng xong nhà vệ sinh sau \(N\) phút, in ra \(-1\).
Tất cả dữ liệu vào thỏa mãn các điều kiện sau:
Mỗi ký tự của xâu \(S_i\) (\(1 \le i \le M\)) là M hoặc F.
Xâu \(X\) được xác định từ dữ liệu vào có độ dài bằng \(2N\). Ở đây, \(|S_i|\) là độ dài của xâu \(S_i\).
Ví dụ 1
6
1
FFFMMMMMMFFF 1
2
Trong ví dụ 1, có \(12\) thí sinh đang xếp thành một hàng. Sắp xếp lại hàng như sau:
Với cách sắp xếp này, mức độ bất mãn lớn nhất là \(2\). Sau khi sắp xếp lại, xâu biểu diễn hàng thí sinh là FMMFFMMMMFFF (M là nam, F là nữ).
Gọi thí sinh đứng thứ \(i\) từ đầu hàng sau khi sắp xếp lại là thí sinh \(i\) (\(1 \le i \le 12\)). Các thí sinh sử dụng nhà vệ sinh như sau:
Không có cách sắp xếp lại hàng thỏa mãn yêu cầu mà mức độ bất mãn lớn nhất nhỏ hơn \(2\), nên in ra \(2\).
Ví dụ 2
6
1
MMFFMMMMFFMF 1
-1
Không có cách sắp xếp lại hàng nào để tất cả mọi người đều sử dụng xong nhà vệ sinh sau \(6\) phút.
Ví dụ 3
6
1
MFFFMFMMFFFM 1
0
Ví dụ 4
6
4
M 1
F 2
FM 2
MFFFM 1
0
Trong ví dụ 3 và ví dụ 4, xâu \(X\) được xác định từ dữ liệu vào là như nhau, đều bằng MFFFMFMMFFFM.