题意

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

想法

自己在多项式和数论方面还是太差了,最近写这些题都没多少思路,看完题解才会

首先有这两个柿子

\(k*\dbinom{n}{k} = n*\dbinom{n - 1}{k - 1}\)

\((1 + x) ^ n = \sum_{i = 0}^{n}\dbinom{n}{i}x^i\)

然后对于题目中所要求的多项式\(f(x)\)我们自然把他拆开,对于一个单个\(k\)对答案贡献

\(\sum_{i = 1}^{m}a_i * (k^i * x^k * \dbinom{n}{k})\)

然后我们发现这个项\(k^i* \dbinom{n}{k}\)

是我们所给的第一个柿子的拓展

我们取\(i = 2\)来看看柿子的展开

\(k^2* \dbinom{n}{k}\)

\(k*((n) * \dbinom{n - 1}{k - 1})\)

\((k - 1 + 1)*((n) * \dbinom{n - 1}{k - 1})\)

\((k - 1)*n*\dbinom{n - 1}{k - 1} + n * \dbinom{n - 1}{k - 1}\)

\(n*(n - 1)*\dbinom{n - 2}{k - 2} + n * \dbinom{n - 1}{k - 1}\)

取\(i = 3.......\)

我们发现\(k^p * \dbinom{n}{k}\)

可以变为这个柿子

\(\sum_{i = 1}^pS(p,i)n^{\underline i}\dbinom{n - i}{k - i}\)

其中\(n^{\underline i}\)是下降幂

而\(S(p,i)\)这个系数可以这样推来\(S(p,i) = i * S(p - 1,i) + S(p - 1,i - 1)\)

当你在计算展开的时候我们注意到如果我们先把\(k\)给乘进去可以很自然的把一些柿子给转化成\(k^i-1\dbinom{n}{k}\)的展开形式

这个时候会给\(S(p,i)多一个S(p - 1,i - 1)的系数\)

然后我们会发现把可转化的柿子转化完后\(我们把k拆成(k - i + i)这个时候又会多一个i * S(p - 1,i)\)

这是一个好的结论

\(k^p * \dbinom{n}{k}\ =\ \sum_{i = 1}^pS(p,i)n^{\underline i}\dbinom{n - i}{k - i}\)

其中

\(S(p,i) = i * S(p - 1,i) + S(p - 1,i - 1)\)

然后我们往原柿子里带(打不动了)

括号里用二项式定理打开

做完了

代码

#include <cstdio>
using namespace std;
typedef long long LL;
inline LL read()
{
LL val = 0; char c = getchar();
while(c < '0' || c > '9') c = getchar();
while(c >= '0' && c <= '9') { val = val * 10 + (c ^ 48); c = getchar(); }
return val;
}
const int M = 1005;
LL a[M], n, x, p, m, S[M][M], ans;
inline LL Qpow(LL b, LL c)
{
LL res = 1;
while(c)
{
if(c & 1) res = res * b % p;
b = b * b % p;
c >>= 1;
}
return res;
}
int main()
{
n = read(); x = read(); p = read(); m = read();
for(int i = 0; i <= m; i++) a[i] = read();
S[1][1] = 1;
for(int i = 2; i <= m; i++)
for(int j = 1; j <= i; j++)
S[i][j] = ((S[i - 1][j] * j) % p + S[i - 1][j - 1]) % p;
ans = a[0] * Qpow(x + 1, n) % p;
for(int i = 1; i <= m; i++)
{
LL sum = 0, tmp = n;
for(int j = 1; j <= i; j++)
{
sum = (sum + (S[i][j] * tmp % p * Qpow(x, j) % p * Qpow(x + 1, n - j) % p)) % p;
tmp = tmp * (n - j) % p;
}
ans = (ans + a[i] * sum % p) % p;
}
printf("%lld\n", ans);
return 0;
}

[省选联考 2020 A 卷] 组合数问题的更多相关文章

  1. luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数)

    luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数) Luogu 题外话: LN切这题的人比切T1的多. 我都想到了组合意义乱搞也想到可能用斯特林数为啥还是没做出来... 我怕 ...

  2. [题解] LOJ 3300 洛谷 P6620 [省选联考 2020 A 卷] 组合数问题 数学,第二类斯特林数,下降幂

    题目 题目里要求的是: \[\sum_{k=0}^n f(k) \times X^k \times \binom nk \] 这里面出现了给定的多项式,还有组合数,这种题目的套路就是先把给定的普通多项 ...

  3. luoguP6623 [省选联考 2020 A 卷] 树(trie树)

    luoguP6623 [省选联考 2020 A 卷] 树(trie树) Luogu 题外话: ...想不出来啥好说的了. 我认识的人基本都切这道题了. 就我只会10分暴力. 我是傻逼. 题解时间 先不 ...

  4. luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理)

    luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理) Luogu 题外话: Day2一题没切. 我是傻逼. 题解时间 某种意义上说刻在DNA里的柿子,大概是很多人学 ...

  5. 洛谷P6623——[省选联考 2020 A 卷] 树

    传送门:QAQQAQ 题意:自己看 思路:正解应该是线段树/trie树合并? 但是本蒟蒻啥也不会,就用了树上二次差分 (思路来源于https://www.luogu.com.cn/blog/dengy ...

  6. P6628-[省选联考 2020 B 卷] 丁香之路【欧拉回路,最小生成树】

    正题 题目链接:https://www.luogu.com.cn/problem/P6628 题目大意 给出\(n\)个点的一张完全无向图,\(i\sim j\)的边权是\(|i-j|\). 然后给出 ...

  7. 洛谷 P6624 - [省选联考 2020 A 卷] 作业题(矩阵树定理+简单数论)

    题面传送门 u1s1 这种题目还是相当套路的罢 首先看到 \(\gcd\) 可以套路地往数论方向想,我们记 \(f_i\) 为满足边权的 \(\gcd\) 为 \(i\) 的倍数的所有生成树的权值之和 ...

  8. 题解 P6622 [省选联考 2020 A/B 卷] 信号传递

    洛谷 P6622 [省选联考 2020 A/B 卷] 信号传递 题解 某次模拟赛的T2,考场上懒得想正解 (其实是不会QAQ), 打了个暴力就骗了\(30pts\) 就火速溜了,参考了一下某位强者的题 ...

  9. luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp)

    luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp) Luogu 题外话: 我可能是傻逼, 但不管我是不是傻逼, 我永远单挑出题人. 题解时间 看数据范围可以确定状压dp. ...

随机推荐

  1. vue3.x非兼容的变更

    走马观花似的看看从vue2.x开始到vue3.x的一些非兼容性的变更,这样在将来升级过程中遇到那些奇奇怪怪的不能用的时候,就会很容易解决啦. 全局 API 全局 Vue API 已更改为使用应用程序实 ...

  2. Spring Security 的注册登录流程

    Spring Security 的注册登录流程 数据库字段设计 主要数据库字段要有: 用户的 ID 用户名称 联系电话 登录密码(非明文) UserDTO对象 需要一个数据传输对象来将所有注册信息发送 ...

  3. 算法:N-gram语法

    一.N-gram介绍 n元语法(英语:N-gram)指文本中连续出现的n个语词.n元语法模型是基于(n - 1)阶马尔可夫链的一种概率语言模型,通过n个语词出现的概率来推断语句的结构.这一模型被广泛应 ...

  4. Docker 安装 MySQL8

    1. 环境准备 创建挂载数据目录和配置文件 mkdir -p /mnt/mysql/data /etc/mysql/conf touch /etc/mysql/conf/my.cnf 2. 拉取镜像 ...

  5. pascals-triangle-ii leetcode C++

    Given an index k, return the k th row of the Pascal's triangle. For example, given k = 3, Return[1,3 ...

  6. vue2强制刷新,解决页面不会重新渲染的问题

    问题描述: 在使用Vue框架开发时,在函数中改变了页面中的某个值,在函数中查看是修改成功了,但在页面中没有及时刷新改变后的值: 解决: 运用 this.$forceUpdate();  //强制刷新, ...

  7. Tenable Nessus 10.0.0 (Unix, Linux) -- #1 漏洞评估解决方案

    请访问原文链接:https://sysin.org/blog/nessus-10/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www.sysin.org 了解 ...

  8. 【centos】更换yum源

    yum下载有时候很慢,可以换一下源: 步骤: 1)下载wget yum install -y wget 2)备份默认的yum mv /etc/yum.repos.d /etc/yum.repos.d. ...

  9. C# 判断未将对象引用设置到对象的实例,出错的代码到底在第几行

    DataTable dt = null; try { var x = dt.Rows.Count; } catch(NullReferenceException nullexception) { Me ...

  10. psutil模块详解

    import psutil#1.系统性能信息模块psutilmem = psutil.virtual_memory()print(mem)#svmem(total=8442675200, availa ...