90pts 求助
查看原帖
90pts 求助
551108
Nuyoah_awa楼主2024/2/23 20:39

Rt.

Wa 在最后一个点:Wrong Answer.wrong answer On line 1 column 1, read 2, expected 8.

code:

#include <iostream>
#include <cstdio>
#include <map>
#define int long long

using namespace std;

const int N = 1e6 + 5, MOD = 1e9 + 7;
int n, k, d, fac[N], inv[N], f[30][N], ans;

int C(int x, int y)
{
	return (fac[x] * inv[x - y] % MOD) * inv[y] % MOD;
}

int qpow(int x, int y)
{
	int res = 1;
	while(y)
	{
		if(y & 1)	(res *= x) %= MOD;
		(x *= x) %= MOD;
		y >>= 1;
	}
	return res;
}

signed main()
{
	scanf("%lld %lld %lld", &n, &k, &d);
	fac[0] = 1;
	for(int i = 1;i <= 1e5;i++)	fac[i] = (fac[i-1] * i) % MOD;
	inv[100000] = qpow(fac[100000], MOD - 2);
	for(int i = 1e5;i > 0;i--)	inv[i-1] = (inv[i] * i) % MOD;
	f[0][0] = 1;
	for(int i = 0;i <= 13;i++)
		for(int j = 0;j <= n - k;j++)
			for(int l = 0;(l << i) <= n - k && l <= (k >> 1);l += d + 1)
				(f[i + 1][j + (l << i)] += f[i][j] * C(k >> 1, l) % MOD) % MOD;
	for(int i = 0;i <= n - k;i++)
		(ans += f[14][i] * C(n - i - (k >> 1), k >> 1) % MOD) %= MOD;
	printf("%lld\n", (C(n, k) - ans + MOD) % MOD);
	return 0;
}

PS:不排除有弱智错误。

2024/2/23 20:39
加载中...