codeforces div2 940

这篇文章介绍了如何在特定条件下计算组合数的函数C,并提供了`Preprocess`和`solve`方法,用于处理整数输入和计算最终答案。主要关注点是模运算和组合数学的应用。
摘要由CSDN通过智能技术生成
const ll mod = 1e9 + 7;
 
namespace comb
{
    int n, p;
    vector<int> inv, fac, finv;
    void Preprocess(int _n, int _p)
    {
        n = _n;
        p = _p;
        inv.resize(n + 5);
        fac.resize(n + 5);
        finv.resize(n + 5);
        inv[1] = 1;
        for (int i = 2; i <= n + 1; ++i)
            inv[i] = (ll)(p - p / i) * inv[p % i] % p;
        fac[0] = 1;
        for (int i = 1; i <= n + 1; ++i)
            fac[i] = (ll)fac[i - 1] * i % p;
        finv[0] = 1;
        for (int i = 1; i <= n + 1; ++i)
            finv[i] = (ll)finv[i - 1] * inv[i] % p;
    }
    int C(int x, int y) { return (ll)fac[x] * finv[y] % p * finv[x - y] % p; }
}
 
void solve()
{
    ll n, k, x, y;
    cin >> n >> k;
    for (int i = 1; i <= k; ++i)
    {
        cin >> x >> y;
        if (x == y)
            --n;
        else
            n -= 2;
    }
    if (n == 0)
    {
        cout << 1 << endl;
    }
    else if (n == 1)
    {
        cout << 1 << endl;
    }
    else
    {
        ll ans = 1, t = 2, cur = 2;
        for (ll i = n; i >= 0; --i)
        {
            ll res = n - i;
            if (res % 2 == 0 && res != 0)
            {
                ans = (ans + comb::C(n, i) * t % mod) % mod;
                cur += 4;
                t = t * cur % mod;
            }
        }
        cout << ans << endl;
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值