排列组合求助
  • 板块学术版
  • 楼主alpharchmage
  • 当前回复5
  • 已保存回复5
  • 发布时间2025/1/10 20:39
  • 上次更新2025/1/11 05:12:46
查看原帖
排列组合求助
411141
alpharchmage楼主2025/1/10 20:39

P10986

#include<bits/stdc++.h>
#define int long long
#define mod 998244353
using namespace std;
int n = 0 , m = 0;
array<int , 100100> fact , fact_inv;
int quick_pow(int x , int y , int p)
{
	int res = 1;
	while(y)
	{
		if(y & 1)
		{
			res *= x;
			res %= p;
		}
		x *= x;
		x %= p;
		y /= 2;
	}
	return res;
}
int get_inv(int x)
{
	return quick_pow(x , mod - 2 , mod);
}
int C(int n , int m)
{
	return fact[n] * fact_inv[m] % mod * fact_inv[n - m] % mod;
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cin >> n >> m;
	fact[0] = 1;
	for(int i = 1;i <= n;++ i) fact[i] = fact[i - 1] * i % mod;
	for(int i = 0;i <= n;++ i) fact_inv[i] = get_inv(fact[i]);
	if(n - 4 * m <= 3)
	{
		cout << quick_pow(10 , n - 4 * m , mod) * C(n - 4 * m + m , m) % mod << endl;
		return 0;
	}
	else
	{
		cout << (quick_pow(10 , n - 4 * m , mod) * C(n - 4 * m + m , m) % mod - quick_pow(10 , n - 4 * m - 4 , mod) * C(n - 4 * m - 4 + m + 1 , m + 1) % mod + mod) % mod % mod << endl;
	}
	return 0;
}

这道题为什么不能用至少(m + 1)个的情况减去至少m个的情况?

2025/1/10 20:39
加载中...