首页 > 其他分享 >洛谷 P6620 [省选联考 2020 A 卷] 组合数问题

洛谷 P6620 [省选联考 2020 A 卷] 组合数问题

时间:2023-08-15 16:37:35浏览次数:35  
标签:nk 洛谷 省选 sum times int binom underline 联考

前置知识

二项式定理

\[(x + y)^n = \sum_{i = 0}^n \binom nix^iy^{n - i} \]

组合恒等式

\[k \times \binom nk = n \times \binom{n - 1}{k - 1} \]

题解

先不管取模的事情。

考虑把 \(f(k)\) 中次数相同的项拿出来,则原式可化为:

\[Ans = a_0 \sum_{k = 0}^n x^k \times \binom nk + \sum_{p = 1}^m a_p \sum_{k = 0}^n\left[k^p \times x^k \times \binom nk\right] \]

对第一项用一下 二项式定理,得:

\[Ans = a_0(1 + x)^n + \sum_{p = 1}^m a_p \sum_{k = 0}^n\left[k^p \times x^k \times \binom nk\right] \]

其中 \(k^p \times \dbinom nk\) 可以用 组合恒等式 化开,可以写成:

\[\sum_{i = 1}^p A_p(i) \times n^{\underline i} \times \binom{n - i}{k - i} \]

\(n^{\underline i}\) 是下降幂,形式化地,\(n^{\underline i} = \prod\limits_{j = n - i + 1}^n j\)。

例如,当 \(p = 2\) 时,

\[k^2 \binom nk = k \times k \binom nk = nk\binom{n - 1}{k - 1} = n(k - 1)\binom{n - 1}{k - 1} + n\binom{n - 1}{k - 1} = n(n - 1)\binom{n - 2}{k - 2} + n\binom{n - 1}{k - 1} \]

当 \(p = 3\) 时,

\[k^3\binom nk = k \times k^2\binom nk = k[n(n - 1)\binom{n - 2}{k - 2} + n\binom{n - 1}{k - 1}] = n(n - 1)(n - 2)\binom{n - 3}{k - 3} + 3n(n - 1)\binom{n - 2}{k - 2} + n\binom{n - 1}{k - 1} \]

接下来,瓶颈来到了如何求解系数 \(A_p(i)\)(实际上就是第二类斯特林数)。

考虑如何递推求解 \(A_p(i)\)。

回顾一下前面 \(p = 2, 3\) 的推导过程,并结合 \(A_3(2) = 3\) 这一特殊值,不难得出:

\[A_p(i) = iA_{p - 1}(i) + A_{p - 1}(i - 1) \]

于是递推求解 \(A_p(i)\) 的时间复杂度为 \(\mathcal{O}(m^2)\),完全可以接受。

再回到答案的式子,此时它变为了:

\[Ans = a_0(1 + x)^n + \sum_{p = 1}^m a_p\sum_{i = 1}^p A_p(i) \times n^{\underline i} \times \sum_{k = i}^n\left[ x^k \times \binom{n - i}{k - i} \right] \]

再把 \(\sum\limits_{k = i}^{n} x^k \times \dbinom{n - i}{k - i}\) 单独拿出来看,发现它变形可以用 二项式定理 转化:

\[\sum_{k = i}^{n} x^k \times \dbinom{n - i}{k - i} = x^i \sum_{k = 0}^{n - i} x^k \times \binom{n - i}k = x^i(1 + x)^{n - i} \]

于是有:

\[Ans = a_0(1 + x)^n + \sum_{p = 1}^m a_p \sum_{i = 1}^p A_p(i) \times n^{\underline i} \times x^i(1 + x)^{n - i} \]

时间复杂度 \(\mathcal O(m^2 \log n)\)。

代码:

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int MAXM = 1e3 + 10;

int n, x, p, m, a[MAXM];
ll down[MAXM], s[MAXM][MAXM];

ll qp(ll base, int e) {
    ll res = 1;
    while (e) {
        if (e & 1) res = res * base % p;
        base = base * base % p;
        e >>= 1;
    }
    return res;
}

int main() {
    ios::sync_with_stdio(0); cin.tie(nullptr), cout.tie(nullptr);
    cin >> n >> x >> p >> m;
    for (int i = 0; i <= m; i++) cin >> a[i];
    down[1] = n, s[1][1] = 1;
    for (int i = 2; i <= m; i++) down[i] = down[i - 1] * (n - i + 1) % p;
    for (int i = 2; i <= m; i++) {
        for (int j = 1; j <= i; j++) {
            s[i][j] = (s[i - 1][j - 1] + j * s[i - 1][j]) % p;
        }
    }
    ll ans = a[0] * qp(1 + x, n) % p;
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= i; j++) ans = (ans + a[i] * s[i][j] % p * down[j] % p * qp(x, j) % p * qp(1 + x, n - j)) % p;
    }
    cout << ans;
    return 0;
}

标签:nk,洛谷,省选,sum,times,int,binom,underline,联考
From: https://www.cnblogs.com/chy12321/p/17631626.html

相关文章

  • SDFZ 8 月联考游记
    前言现在写的时候已经是\(\mathsf{15}\)号了。省流:\(100+100+100+100=400\)。Day0大颓,打原神+崩铁。崩铁刷出极品双爆衣,感觉明天会寄掉了。晚上随便刷点区间dp睡觉。Day1\(8:00\)到校,发现\(9:00\)才开考。清峥说会有矩阵乘法的题目,所以复习了一下。接下来就是......
  • 2023-08-14 CSP-J模拟联考 游记
    8:00 赶到 FZ,9:00正式开考。开考前先洗了一把脸。9:00~9:15开T1,原本没有思路,但后来想到可以贪心,每次找到<n 的最大的斐波那契数。于是打了个斐波那契的表,就过了。9:15~10:00T2写了45分钟我是什么东西。一开始想法是把每一个字符的数量统计起来,如果相差<1就满足要求,否......
  • 删数问题 洛谷p1323
    决定做一系列贪心,贪心真的,最早学的算法,到现在还有时候不太敢贪,还贪不来,一直挺逃避贪心问题的。。 删除前的数字可以先用优先队列对所有数字进行预处理,数据范围是3e4,也不是很大,直接全部处理了吧。constintN=1e5+10,inf=0x3f3f3f3f3f3f3f3f,MAX=3e4+10;inta[N]......
  • 【题解】洛谷 P9532 [YsOI2023] 前缀和
    原题链接【LGR-151-Div.2】洛谷8月月赛II&YsOI2023T1解题思路设有一序列a,其中a1 =a2,第k(≥3) 项为前k-1项的前缀和。可以发现前q项分别为第一项的20 倍,20 倍,21 倍,22 倍,23 倍…2q-3 倍,2q-2 倍。扩展到整个序列中,可得第i( ≥ 3)项一定为2i-2a1。......
  • 洛谷P9533 区间翻转区间异或和 题解
    原题:洛谷P9533一道性质题不难发现,区间翻转操作是没有用的(虽然比赛的时候想了好久www)首先,区间翻转要想对答案有贡献,一定是下边这种情况:三个连续的区间:\(A~|~B~|~C\)满足:\(B\oplusC=0,A\oplusC=0\)。将\(B∪C\)这个灵异区间进行翻转,使\(A\)和\(C\)合并到一起,会增加一......
  • 2023年多校联训NOIP层测试7+【LGR-149-Div.3】洛谷基础赛 #2 & qw Round -1
    2023年多校联训NOIP层测试7,集训欢乐赛,绝对欢乐,童叟无欺赛时在回家的路上+睡觉,所以没打。\(T1\)近似ybtOJ2049:【例5.19】字符串判等本题少了对空格的判断,水题。PS:题面和题解中都写了文件输入输出,测评时没有文件输入输出是几个意思,艹。#include<bits/stdc++.h>usingname......
  • 「题解注释」P7518 [省选联考 2021 A/B 卷] 宝石
    联合省选2021宝石题解-hezlik的博客-洛谷博客(luogu.com.cn)耗时:一晚上+半个上午代码注释:#include<bits/stdc++.h>usingnamespacestd;constintN=500000,C=21;intRi(){intx=0,y=1;charc=getchar();for(;c<'0'||c>'9';c=getchar())if......
  • 【LGR-149-Div.3】洛谷基础赛 #2 & qw Round -1
    T1签到。T2送分题。T3大模拟,但是TLE两个点。#include<bits/stdc++.h>#definelllonglong#defineintlonglong#definereregisterusingnamespacestd;constintN=1e5+5,INF=0x3f3f3f3f;intn;queue<string>Q;map<string,int>zt;//0不在;1排队;2游玩;......
  • 联合省选 2023 填数游戏
    这是22年的我:https://www.luogu.com.cn/record/81067862这是23年的我:看我一个流过冲过A性质首先考虑判定。一个经典模型是:如果在\(T_{i,0}\)与\(T_{i,1}\)之间连一条无向边(若\(|T_i|=1\)则认为\(T_{i,1}=T_{i,0}\)),那么题目转化为给每条边定向,使得每个点的入度不超......
  • 洛谷 P7739 - [NOI2021] 密码箱
    感觉难度和今年D2T2差不多。首先一个很显然的事情是,每一步得到的分数的分子分母都是互质的,证明参考SBT。而最后答案要求我们将分子分母都求出来而不是求分数值,所以可以很明显的想到将分数当成一个二元组然后维护变换。考虑从右往左扫,假设当前分数为\(\dfrac{x}{y}\),那么扫过......