首页 > 其他分享 >Biological Software Utilities

Biological Software Utilities

时间:2022-10-02 20:33:28浏览次数:75  
标签:个点 power ll Utilities base ans Biological MOD Software

传送门

题意:
\(n\)个点,问可以构造出多少个可以完美实现两两匹配的个数,结果取模


思路:
首先,奇数为0,偶数才有可能,先把n个点两两进行匹配,观察得出2 -> 1, 4 -> 1 * 3, 6 -> 1 * 3 * 5, 所以猜想n个点,有1 * 3 * 5 * \(\dots\) * n - 1
其次,可以把两个点看成一个大点,然后,考虑这样能够构造出多少棵树,根据cayley公式,数量为m ^ (m - 2)
再次,每个大节点有4中连接方法,还有4 ^ (m - 1)个
所以,答案就是上述相乘


总结:
cayley公式,m个点,能够成的树的数量为m ^ (m - 2)


点击查看代码
#include <bits/stdc++.h>
#define endl '\n'
#define IOS ios::sync_with_stdio(false);
using namespace std;

typedef long long ll;
const ll MOD = 998244353;
const ll MAXN = 1e6 + 10;
ll n;
ll c[MAXN];

ll quick_pow(ll base, ll power)
{
	ll ans = 1;
	while (power)
	{
		if (power & 1)
			ans = ans * base % MOD;
		base = base * base % MOD;
		power >>= 1;
	}
	return ans;
}

void init()
{
	c[2] = 1;
	for (ll i = 4; i < MAXN; i += 2)
		c[i] = (i - 1) * c[i - 2] % MOD;
}

int main()
{
	IOS; cin.tie(0), cout.tie(0);
	init();
	cin >> n;
	if (n & 1)
		cout << "0" << endl;
	else if (n == 2)
		cout << "1" << endl;
	else
	{
		ll ans = c[n] * quick_pow(4ll, n / 2 - 1) % MOD * quick_pow(n / 2, n / 2 - 2) % MOD;
		cout << ans << endl;
	}
	return 0;
}

标签:个点,power,ll,Utilities,base,ans,Biological,MOD,Software
From: https://www.cnblogs.com/jumo-xiao/p/16749389.html

相关文章