1980: #6044. 「雅礼集训 2017 Day8」共

题目描述

俗话说,跳蚤国王下江南,火车司机出秦川,共价大爷游长沙。

但是这道题可能跟上面几句话没什么关系。
共价爷想构造一棵 N NN 个点的有根树,其中 1 11 号点是根。
显然的,对于一棵有根树,我们可以定义每个点的深度为,这个点到根的路径上点的个数(包括端点),也就是说,1 11 号点深度为 1 11。
共价爷希望,深度为奇数的点的个数,刚好为 K KK 个。
他想知道有多少棵不同的满足条件的有根树,你只需要输出答案对 P PP 取模的结果。

我们认为两棵树不同,当且仅当存在一对点 (i,j) (i, j)(i,j),满足 i ii 和 j jj 在一棵树中有边相连,而在另一棵树中没有边相连。

输入

一行三个整数,依次为 N NN、K KK、P PP。

输出

一个正整数,表示答案。

样例输入 

4 2 998244353

样例输出 

12

提示

对于 5% 5\%5% 的数据,是样例;
对于 20% 20\%20% 的数据,N≤20 N \leq 20N≤20;
对于 40% 40\%40% 的数据,N≤100 N \leq 100N≤100;
对于 70% 70\%70% 的数据,N≤1000 N \leq 1000N≤1000,P PP 为 1000000007 10000000071000000007 或 998244353 998244353998244353 且均匀分布;
对于 90% 90\%90% 的数据,N≤50000 N \leq 50000N≤50000;
对于 100% 100\%100% 的数据,

#include <cstdio>
#include <algorithm>
#include <vector>
#define file(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)
 
inline int read()
{
    int data = 0, w = 1; char ch = getchar();
    while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
    if (ch == '-') w = -1, ch = getchar();
    while (ch >= '0' && ch <= '9') data = data * 10 + (ch ^ 48), ch = getchar();
    return data * w;
}
 
const int N(5e5 + 10);
int n, K, Mod, fac[N], inv[N];
int C(int n, int m) { return 1ll * fac[n] * inv[m] % Mod * inv[n - m] % Mod; }
int fastpow(int x, int y)
{
    int ans = 1;
    for (; y; y >>= 1, x = 1ll * x * x % Mod)
        if (y & 1) ans = 1ll * ans * x % Mod;
    return ans;
}
 
int main()
{
    n = read(), K = read(), Mod = read(), fac[0] = inv[0] = 1;
    for (int i = 1; i <= n; i++) fac[i] = 1ll * fac[i - 1] * i % Mod;
    inv[n] = fastpow(fac[n], Mod - 2);
    for (int i = n - 1; i; i--) inv[i] = 1ll * inv[i + 1] * (i + 1) % Mod;
    printf("%lld\n", 1ll * C(n - 1, K - 1) * fastpow(K, n - K - 1) % Mod * fastpow(n - K, K - 1) % Mod);
    return 0;
}

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值