Phần Tử Lớn Nhất
Đề bài
Mô tả
Cho hàm "tìm phần tử lớn nhất" sau đây, được tham số hoá bởi một hằng số :
int fast_max(int n, int a[]) {
int ans = 0;
int offset = 0;
for (int i = 0; i < n; ++i)
if (ans < a[i]) {
ans = a[i];
offset = 0;
} else {
offset = offset + 1;
if (offset == k)
return ans;
}
return ans;
}
Hàm này duyệt mảng và duy trì giá trị lớn nhất hiện tại trong ans. Nếu trong vòng lặp liên tiếp giá trị ans không thay đổi thì hàm dừng sớm và trả về ans.
Cho hai số nguyên và . Hãy đếm số hoán vị của mà khi truyền vào hàm trên thì giá trị trả về không bằng . Vì kết quả có thể rất lớn, hãy in ra phần dư khi chia cho .
Dữ liệu vào
Một dòng chứa hai số nguyên và ().
Dữ liệu ra
Một số nguyên — số hoán vị thoả mãn, modulo .
Ràng buộc
- .
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 5 2 | 22 | Có 22 hoán vị của làm hàm trả về giá trị khác . |
| 5 3 | 6 | Sáu hoán vị thoả mãn: , , , , , . Trong các hoán vị này, hàm dừng sớm trước khi gặp và trả về . |
| 6 3 | 84 | Có 84 hoán vị của làm hàm trả về sai. |
Bình luận