em làm bài trên code learn thì gặp bài này ạ, mong mọi người giúp đỡ:
Hôm nay tại công viên Thủ Lệ, mọi người đang xếp hàng để mua vé vào. Văn là bảo vệ ở đây. Từ chỗ anh ấy đứng có thể nhìn thấy một hàng người với chiều cao khác nhau. Anh ấy nhận ra với N người xếp hàng thì người bán vé chỉ nhìn thấy M người với M ≤ N
bởi vì người cao hơn đứng trước đã che người thấp hơn đứng sau. Tìm xem có bao nhiêu hoán vị khác nhau có thể của hàng đợi đó.
Ví dụ
-
Với
N = 3, M = 1
, đầu ra làqueueInPark(N,M) = 2
.
Giả sử 3 người (N) có chiều cao khác nhau như sau: 3, 6, 9.
Người có chiều cao là 9 là người cao nhất và có thể che 2 người vì vậy người bán vé chỉ có thể nhìn thấy 1 người (M).
Ta có 2 cách sắp xếp: 9-3-6, 9-6-3. -
Với
N = 5, M = 3
, đầu ra làqueueInPark(N,M) = 35
.
Đầu vào/Đầu ra
- [giới hạn thời gian chạy] 1 second
-
[đầu vào] two integers
số người với chiều cao khác nhau và số người mà người bán vé có thể nhìn thấy. Điều kiện tiền đề:
1 ≤ m ≤ n ≤ 1000
. -
[đầu ra] integer
phần dư kết quả của hàm chia cho1000000007 (10^9 + 7)
.
bên dưới là code của em ạ.:
function queueInPark(n, m){
if(m == 1 || m == n){
return (computeFactorial(n - m ));
}
return (computeFactorial(m) * computeFactorial(n - m + 1)) - 1;
// if(m == 1 || m == n){
// return (computeFactorial(n - m ));
// }
// return (computeFactorial(n) * computeFactorial(n - m)) - 1;
// if(m>n)
// return 0;
// if(m==1 || ((n-m)%2) == 0){
// return computeFactorial(n-1);
// }
// if((n-m) == 1){
// return n-1;
// }
}
function computeFactorial(n) {
if (n > 0) {
return n * computeFactorial(n - 1);
} else {
return 1;
}
}
các test case ạ:
test | Đầu vào | Đầu ra mong muốn |
---|---|---|
1 | 3, 1 | 2 |
2 | 5, 3 | 35 |
3 | 4, 2 | 11 |
4 | 6, 6 | 1 |
5 | 8, 7 | 28 |
6 | 9, 1 | 40320 |