Giả sử ta có mảng rect với rect[i] = [len_i, wid_i] là chiều dài và rộng của hình chữ nhật thứ i. Ta có thể cắt hình chữ nhật thứ i để tạo vuông cạnh k nếu k <= len_i và k <= wid_i. Ví dụ: hình chữ nhật [4,6] có thể cắt thành vuông cạnh tối đa 4. Xét maxLen là cạnh vuông lớn nhất có thể tạo từ các hình chữ nhật cho trước. Ta phải tìm số hình chữ nhật có thể tạo vuông cạnh maxLen.
Ví dụ: rect = [[6,9],[4,10],[6,13],[17,6]], kết quả là 3 vì các cạnh vuông lớn nhất là [6, 4, 6, 6], có 3 hình chữ nhật tạo được vuông lớn nhất.
Giải thuật
m := []- Với mỗi
rtrongrect: thêmmin(r)vàom - Đếm số lần xuất hiện của
max(m)trongmvà trả về
Ví dụ (Python)
def solve(rect):
m = []
for r in rect:
m.append(min(r))
return m.count(max(m))
rect = [[6,9],[4,10],[6,13],[17,6]]
print(solve(rect))
Input
[[6,9],[4,10],[6,13],[17,6]]
Output
3