Điều hướng chính

Ngôn ngữ

Phím tắt

/
Chuyển đến ô tìm bài
g p
Đi đến bài tập
g c
Đi đến kỳ thi
g u
Đi đến người dùng
?
Mở trợ giúp phím tắt

Vượt sông

Dễ Đường đi ngắn nhất Dijkstra

  • 100 Điểm
  • 0% Tỉ lệ AC
  • 0 Số AC
  • 256M Bộ nhớ giới hạn
  • 1.0s Giới hạn thời gian

Nhóm bạn của Tuấn đang đi dã ngoại và bất ngờ gặp một con sông lớn. Tổng cộng có \(n\) người trong nhóm, bao gồm cả Tuấn. May mắn thay, có một con thuyền nhỏ ở ngay bờ sông. Con thuyền này có thể chở một lúc một nhóm người với tổng trọng lượng tối đa là \(k\) kilogam.

Để tính toán số lượt di chuyển, Tuấn đã thống kê trọng lượng của mọi người trong nhóm. Kết quả cho thấy mỗi người có trọng lượng là 50 hoặc 100 kilogam. Bây giờ, Tuấn muốn tìm số lượt di chuyển tối thiểu để đưa tất cả mọi người sang bờ bên kia. Con thuyền cần ít nhất một người để điều khiển nó từ bờ này sang bờ kia. Mỗi lần di chuyển, thuyền có thể chở bất kỳ số người nào (lớn hơn 0), miễn là tổng trọng lượng của họ không vượt quá \(k\).

Ngoài ra, Tuấn còn thắc mắc có bao nhiêu cách để đưa mọi người sang bờ bên kia trong số lượt di chuyển tối thiểu đó. Hai cách được coi là khác nhau nếu trong một lượt di chuyển nào đó, tập hợp người trên thuyền cách này khác tập hợp người trên thuyền của cách kia. Tuy nhiên, không phải lúc nào Tuấn cũng thắc mắc câu hỏi này, chính vì vậy, Tuấn đã cung cấp một số nguyên dương \(T\) \((1 \leq T \leq 2)\). Nếu \(T = 2\), Tuấn sẽ thắc mắc số lần di chuyển ít nhất và số cách để đưa sang bờ bên kia với số lần di chuyển ít nhất. Nếu \(T = 1\), Tuấn chỉ hỏi rằng số lượt di chuyển ít nhất là bao nhiêu.

Yêu cầu: Hãy giúp Tuấn giải quyết bài toán này.

Input

  • Dòng đầu tiên chứa số nguyên dương \(T\) \((1 \leq T \leq 2)\).
  • Dòng đầu tiên chứa hai số nguyên \(n, k\) (\(1 \le n \le 50, 1 \le k \le 5000\)) lần lượt là số người trong nhóm và giới hạn trọng lượng của thuyền.
  • Dòng tiếp theo chứa \(n\) số nguyên là trọng lượng của từng người, mỗi người có trọng lượng là 50 hoặc 100 kilogam.
  • Bạn có thể coi Tuấn và các bạn của anh ấy được đánh số theo một thứ tự nào đó.

Output

  • Dòng đầu tiên in ra một số nguyên là số lượt di chuyển tối thiểu. Nếu không thể đưa tất cả mọi người sang bờ bên kia, in ra \(-1\).
  • Nếu \(T = 2\), in ra dòng thứ hai chính là phần dư của số cách di chuyển trong số lượt tối thiểu sau khi chia cho \(1000000007\) (\(10^9 + 7\)). Nếu không thể di chuyển, in ra \(0\).

Example

Test 1

Input
1
1 50
50
Output
1
Note

Với 3 người (hai người 50kg và một người 100kg) và thuyền 100kg:

  • Lượt 1: Chở hai người 50kg sang bờ.
  • Lượt 2: Một người 50kg quay lại.
  • Lượt 3: Chở người 100kg sang.
  • Lượt 4: Một người 50kg quay lại.
  • Lượt 5: Hai người 50kg còn lại sang bờ.

Tổng cộng 5 lượt. Có 2 cách để chọn người 50kg quay lại ở lượt 2, dẫn đến 2 cách khác nhau.

Test 2

Input
2
3 100
50 50 100
Output
5
2

Test 3

Input
2
2 50
50 50
Output
-1
0

Scoring

  • Subtask 1 (20% số điểm) : \(T = 1\), tất cả người trên thuyền đều có trọng lượng bằng nhau.
  • Subtask 2 (20% số điểm) : \(T = 1, n \leq 3\).
  • Subtask 3 (20% số điểm) : \(T = 1, n \leq 10\).
  • Subtask 4 (20% số điểm) : \(T = 2, n \leq 100\).
  • Subtask 5 (20% số điểm) : không có ràng buộc gì thêm.

Bình luận

Chưa có bình luận nào.