【上海网络赛 Counting SequenceII】

1.

 

一句话题意:构造一个长度为n的数组,a[1,n],范围为[1,m].其中偶数出现的次数必须是偶数次。

2.解析:母函数计数问题。还是很常规的用法,母函数写一下。这里我们是首先考虑无限长的时候,然后再单独的看n的系数即可。假设在[1,m]中有t个偶数,那么就有m-t个奇数。

                                                 G(x)=(1+\frac{x^2}{2}+\frac{x^4}{4!}....)^t*(1+x+\frac{x^2}{2}+\frac{x^3}{3!}..)^{m-t}

然后泰勒级数求和一下:

                                                G(x)=(\frac{e^x+e^{-x}}{2})^t*e^{(m-t)x}

然后化简一下,把括号二项式展开:

                                               G(x)=\frac{1}{2^t}\sum_{i=0}^{t}C_{t}^{i}e^{(m-2i)x}

这个时候,把e^x做一下泰勒展开,其实可以这样考虑,首先把i看作常数,然后会有t个含有e^x的式子,对于每个式子,我们考虑这个式子的第n项,然后把这些系数加起来就是答案。最

展开可得:

                                           G(x)=\sum_{n=0}^{\infty}\frac{1}{2^t}\sum_{i=0}^{t}C_{t}^{i}(m-2i)^n*\frac{x^n}{n!}

那么对于第n项的系数就是:

                                           an=\frac{1}{2^t}\sum_{i=0}^{t}C_{t}^{i}(m-2i)^n

到这里,这个题就做完了,其实难度很低。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int mod = 1e9 + 7;
const int N = 200010;
ll fac[N];
ll inv[N];
ll qpow(ll a, ll b)
{
	ll res = 1;
	while (b)
	{
		if (b & 1)res = res * a % mod;
		a = a * a % mod;
		b >>= 1;
	}
	return res;
}
void init()
{
	fac[0] = 1;
	for (int i = 1; i < N; i++)
		fac[i] = fac[i - 1] * i % mod;
	inv[N - 1] = qpow(fac[N - 1], mod - 2);
	for (int i = N - 2; i >= 0; i--)
		inv[i] = inv[i + 1] * (i + 1) % mod;
}
int main()
{
	init();
	int T;
	scanf("%d", &T);
	while (T--)
	{
		ll n, m;
		scanf("%lld%lld", &n, &m);
		int t = m / 2;
		ll ans = 0;
		for (int i = 0; i <= t; i++)
		{
			ans = (ans + fac[t] * inv[i] % mod * inv[t - i] % mod * qpow((m - i * 2), n) % mod) % mod;
		}
		ll inv2 = qpow(qpow(2, t), mod - 2);
		printf("%lld\n", ans * inv2 % mod);
	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值