ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

gym-103708E Erudite of words

2022-08-28 23:03:59  阅读:149  来源: 互联网

标签:invfac int gym maxn words ans 103708E ll mod


Erudite of words

组合数学 + 容斥

定义 \(F_i\):表示由 \(i\) 个字母组成的长度为 \(n\) 的单词数(每个字母必须在单词中出现)

显然答案就是 \(F_k * C_{m}^{k}\)

关于 \(F_i\) 的递推式:

\[F_i = i^n - \sum_{j=1}^{k-1}(F_j) \]

显然 \(i^n\) 代表 \(i\) 个字母随意摆放的情况,容斥地减去字母数为 \(1,2,3,...,i-1\) 的情况后,剩下的就是 \(F_i\)

大量计算组合数的时候,可以用递推预处理阶乘和阶乘逆元,询问组合数的时候就是 \(O(1)\)

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 10;
const ll mod = 1e9 + 7;
ll fac[maxn], last[maxn], invfac[maxn];

ll qpow(ll x, ll n)
{
    ll ans = 1;
    while(n)
    {
        if(n & 1) ans = x * ans % mod;
        n >>= 1;
        x = x * x % mod;
    }
    return ans % mod;
}

ll cal(ll up, ll down)
{
    ll ans = fac[down] * invfac[up] % mod;
    ans = ans * invfac[down - up] % mod;
    return ans;
}

int main()
{
    ll n, m, k;
    cin >> n >> m >> k;
    fac[0] = 1;
    for(int i=1; i<maxn; i++) fac[i] = fac[i-1] * i % mod;
    invfac[maxn - 1] = qpow(fac[maxn - 1], mod - 2);
    for(int i=maxn-2; i>=1; i--)
        invfac[i] = invfac[i + 1] * (i + 1) % mod;
    invfac[0] = invfac[1];
    if(k > n) {cout << 0 << endl; return 0;}
    for(int i=1; i<=k; i++)
    {
        last[i] = qpow(i, n);
        ll ans = 0;
        for(int j=1; j<i; j++)
            ans = (ans + cal(j, i) * last[j]) % mod;
        last[i] = (last[i] - ans) % mod + mod;
        last[i] %= mod;
    }
    cout << cal(k, m) * last[k] % mod << endl;
    return 0;
}

标签:invfac,int,gym,maxn,words,ans,103708E,ll,mod
来源: https://www.cnblogs.com/dgsvygd/p/16634345.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有