比赛 暑假综合模拟2 评测结果 AAAAAAAAAA
题目名称 求组合数 最终得分 100
用户昵称 jekyll 运行时间 0.056 s
代码语言 C++ 内存使用 1.84 MiB
提交时间 2018-08-05 20:44:16
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cmath>
#define int ll

using namespace std;
typedef long long ll;

const ll mod = 1000000007;

int n, m;
int fac[200005];

void facinit(int n, int mod) {
	fac[0] = 1;
	for (int i = 1; i <= n; i++)
		fac[i] = fac[i-1] * i % mod;
}

void exgcd(int a, int b, int &x, int &y) {
	if (!b) x = 1, y = 0;
	else exgcd(b, a % b, y, x), y -= a / b * x;
}

int inv(int a, int mod) {
	int x, y; exgcd(a, mod, x, y);
	return (x + mod) % mod;
}

int C(int n, int m, int mod) {
	if (n < m) return 0;
	return (fac[n] * inv(fac[m], mod) % mod) * inv(fac[n - m], mod) % mod;
}

int main_() {
	freopen("combination.in", "r", stdin);
	freopen("combination.out", "w", stdout);
	int n, m;
	cin >> n >> m;
	facinit(max(n, m), mod);
	cout << C(n, m, mod);
	return 0;
}

int Main = main_();
signed main() {;}