逆天码风
  • 板块灌水区
  • 楼主ケロシブルアカ
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/6 22:18
  • 上次更新2024/8/6 22:58:10
查看原帖
逆天码风
511639
ケロシブルアカ楼主2024/8/6 22:18

CF1747E

const int N = 1e7 + 5;
const int P = 1e9 + 7;
int add(int x, int y) { return (x + y < P ? x + y : x + y - P); }
void Add(int &x, int y) { x = (x + y < P ? x + y : x + y - P); }
int mul(int x, int y) { return (1ll * x * y) % P; }
void Mul(int &x, int y) { x = (1ll * x * y) % P; }
int fp(int x, int y) {
	int res = 1;
	for(; y; y >>= 1) {
		if(y & 1) Mul(res, x);
		Mul(x, x);
	}
	return res;
}
int n, m;
int fac[N], finv[N], pw[N];
void init(int n) {
	fac[0] = pw[0] = 1;
	FOR(i, 1, n) pw[i] = add(pw[i - 1], pw[i - 1]);
	FOR(i, 1, n) fac[i] = mul(fac[i - 1], i);
	finv[n] = fp(fac[n], P - 2);
	ROF(i, n - 1, 0) finv[i] = mul(finv[i + 1], i + 1);
}
int C(int x, int y) {
	if(x < y || y < 0) return 0;
	return mul(mul(fac[x], finv[y]), finv[x - y]);
}

Add(ans, mul(
	mul(C(n - 1, i - 1), (i + 1)), 
	add(
		mul(C(i + m - 1, i + 1), pw[m - 2]),
		mul(C(i + m, i), pw[m])
	)
));
2024/8/6 22:18
加载中...