1 条题解
-
1
和作业类似,可以先每个人分配a[i]-1个,这样每个人还需要分配的数量变为1个,之后就是标准的隔板法了~
参考代码
#include <iostream> #include <algorithm> using namespace std; const int P = 1e9+7; long long x, y, k, fact[1000005], inv[1000005], finv[1000005], p[1000005],a[1005]; int main() { cin >> x >> y ; long long sum=0; for(int i=1;i<=y;i++) { cin>>a[i]; sum+=a[i]; } fact[0] = 1; for (int i = 1; i <= 1000000; i++) fact[i] = fact[i - 1] * i % P; finv[0] = finv[1] = inv[1] = 1; for (int i = 2; i <= 1000000; i++) { int k = P / i, r = P % i; inv[i] = ((-1 * k * inv[r] % P) + P) % P; finv[i] = finv[i - 1] * inv[i] % P; } x = x - sum + y; if (x < 0) cout << 0; else cout << fact[x - 1] * finv[y - 1] % P * finv[x - y] % P << endl;
}
- 1
信息
- ID
- 673
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- (无)
- 递交数
- 87
- 已通过
- 46
- 上传者