题目描述
在一条数轴上,从0至N共有N+1个整点,分别是:0,1,2,3,4,...N。有K头奶牛,每头奶牛选择一个整点作为它们的家,但它们不能选择相同的整点。为了方便联络,住得最远的那两头奶牛的距离必须等于D。问有多少种不同的方案?答案模1000000007。
输入格式
一行,三个整数,N、K、D。 2 <= N <= 10^9。 2<= K < 20000000。 K-1 <= D <= 20000000。
输出格式
一个整数。
输入样例
3 3 3
输出样例
12
题解
易得答案为$(n - d + 1) \times P_{k}^{2} \times P_{d - 1}^{k - 2}$,其中$P_{k}^{2}$表示最远的两头奶牛的排列数,$P_{d - 1}^{k - 2}$为剩下$k - 2$头奶牛的坐标排列数。
扫描二维码关注公众号,回复:
5958527 查看本文章
#include <iostream> using namespace std; long long n, k, d; const int mod = 1000000007; long long P(int n, int m) { long long res = 1; for(register int i = n - m + 1; i <= n; ++i) { res = res * i % mod; } return res; } int main() { cin >> n >> k >> d; if(n < k || n < d || k > d) return cout << 0, 0; cout << (n - d + 1) * P(k, 2) % mod * P(d - 1, k - 2) % mod; return 0; }