SolutionSolutionSolution

设最后是这个样子 a=(ai−bi)a=(ai−bi)\textbf{a}=(a_i-b_i) ,可以通过数学归纳得到

res=∏iai−∏i(ai−bi)res=∏iai−∏i(ai−bi)

res=\prod_{i}a_i-\prod_{i}(a_i-b_i) 那么考虑组合意义:

E∑ibi=k∏i(ai−bi)==k!∏ibi!1nk∑∑ibi=k∏i(ai−bi)k!nk∑∑ibi=k∏i(ai−bi)bi!E∑ibi=k∏i(ai−bi)=k!∏ibi!1nk∑∑ibi=k∏i(ai−bi)=k!nk∑∑ibi=k∏i(ai−bi)bi!

\begin{eqnarray*} \mathbb{E}_{\sum_{i}b_i=k}\prod_{i}(a_i-b_i)&=b_i!}{1\over n^k}\sum_{\sum_{i}b_i=k}\prod_{i}(a_i-b_i)\\ &=\sum_{\sum_{i}b_i=k}\prod_{i}{(a_i-b_i)\over b_i!} \end{eqnarray*} 考虑生成函数。后面那个式子就等于

[xk]∏i∑j≥0xj(ai−j)j!=[xk]enx∏i(ai−x)[xk]∏i∑j≥0xj(ai−j)j!=[xk]enx∏i(ai−x)

[x^k]\prod_{i}\sum_{j\ge0}{x^j(a_i-j)\over j!}=[x^k]e^{nx}\prod_{i}(a_i-x) 后面的东西可以暴力乘法 O(n2)O(n2)\mathcal{O}(n^2) 算出来。
再考虑 enxenxe^{nx} 的泰勒展开,算出 xkxkx^k 的系数即可。
这个题从头到尾应该都是可以FFT优化的??

#include <bits/stdc++.h>
#define show(x) cerr << #x << " = " << x << endl
using namespace std;typedef long long ll;
typedef pair<int, int> pairs;
typedef vector<int> poly;
const int MOD = 1000000007;
const int N = 5050;inline char get(void) {static char buf[100000], *S = buf, *T = buf;if (S == T) {T = (S = buf) + fread(buf, 1, 100000, stdin);if (S == T) return EOF;}return *S++;
}
template<typename T>
inline void read(T &x) {static char c; x = 0; int sgn = 0;for (c = get(); c < '0' || c > '9'; c = get()) if (c == '-') sgn = 1;for (; c >= '0' && c <= '9'; c = get()) x = x * 10 + c - '0';if (sgn) x = -x;
}int a[N];
int n, k, ans;
poly c;inline void add(int &x, int a) {x = (x + a >= MOD) ? x + a - MOD : x + a;
}
inline void sub(int &x, int a) {x = (x < a) ? x - a + MOD : x - a;
}
inline poly operator *(poly a, poly b) {static poly c; c.clear();c.resize(a.size() + b.size() - 1);for (int i = 0; i < a.size(); i++)for (int j = 0; j < b.size(); j++)add(c[i + j], (ll)a[i] * b[j] % MOD);return c;
}
inline int pwr(int a, int b) {if (b < 0) b += MOD - 1;int c = 1;while (b != 0) {if (b & 1) c = (ll)c * a % MOD;b >>= 1; a = (ll)a * a % MOD;}return c;
}
inline int A(int n, int m) {int res = 1;for (int i = 0; i < m; i++)res = (ll)res * (n - i) % MOD;return res;
}
inline poly base(int x) {static poly c; c.clear();c.emplace_back(x);c.emplace_back(MOD - 1);return c;
}
inline void watch(poly x) {cerr << "{ ";for (int u: x) cerr << u << ", ";cerr << " }" << endl;;
}int main(void) {freopen("1.in", "r", stdin);freopen("1.out", "w", stdout);read(n); read(k);c.emplace_back(1);for (int i = 1; i <= n; i++) {read(a[i]);c = c * base(a[i]);// watch(c);}for (int j = 1; j < c.size(); j++)sub(ans, (ll)c[j] * A(k, j) % MOD * pwr(n, -j) % MOD);cout << ans << endl;return 0;
}

[生成函数][DP] Codeforces 891 E. Lust相关推荐

  1. CodeForces 891 E.Lust(生成函数)

    Description 给出一长度为nnn的序列a1,...,an" role="presentation" style="position: relative ...

  2. 【Codeforces 891 E】 Lust(生成函数)

    传送门 考虑每次贡献可以差分成aj∏i≠jai−(aj−1)∏i≠jaia_j\prod_{i\not=j}a_i-(a_j-1)\prod_{i\not=j}a_iaj​∏i​=j​ai​−( ...

  3. BZOJ 1004: [HNOI2008]Cards [Polya 生成函数DP]

    传送门 题意:三种颜色,规定使用每种颜色次数$r,g,b$,给出一个置换群,求多少种不等价着色 $m \le 60,\ r,g,b \le 20$ 咦,规定次数? <组合数学>上不是有生成 ...

  4. 图论 ---- dijkstra变种dp Codeforces Div2 703 E. Paired Payment

    题目链接 题目大意: 无向图,但是一次一定要走两步,权值为两个边边权和的平方.求1到其他每个点的最短距离. n∈[1,1e5],m∈[1,min(2e5,n(n−1)2)],wi∈[1,50]n\in ...

  5. 思维dp ---- Codeforces Round #142 (Div. 1) D. Towers

    题目链接 题目大意: 你可以把第iii座塔和i+1i+1i+1座或i−1i-1i−1座合并成一个 使得到的那座塔的高度是原来两座塔的和 问最使序列变成严格不增最小合并次数 解题思路: 首先我想到的是贪 ...

  6. 思维dp ---- Codeforces Round #722 (Div. 1) B. Kavi on Pairing Duty [思维dp + 数学]

    题目大意: 将2n2n2n个点两两相连形成n对,对于任意两个点对A和B,要求至少满足其中一条: 1.A和B的某一个完全包含于另一个中 2.A和B的长度相等.问你一共有多少种方案. 解题思路: 题解:假 ...

  7. 思维dp ---- Codeforces Round #711 (Div. 2) - C. Planar Reflections[dp/记忆化搜索]

    题目链接 题目大意: 就是给你n个平面和一个寿命为k的衰变粒子.开始粒子从左向右飞行,粒子每经过一个平面就会产生一个副本粒子,这个副本粒子比原粒子的寿命少1,即为k-1,并且飞行方向是原粒子的反方向. ...

  8. 树形DP——Codeforces Choosing Capital for Treeland

    http://codeforces.com/problemset/problem/219/D 题意:给一个n节点的有向无环图,要找一个这样的点:该点到其它n-1要逆转的道路最少,(边<u,v&g ...

  9. [C++ map dp]codeforces 960F. Pathwalks

    题目传送门:960F 思路: 题目给人的感觉很像最长上升子序列,自然而然想到用dp的思路去处理 题目中给的限制条件是,要接上前面的边,前面的边权一定要小于当前的边权(题目按照输入的顺序,因此只找前面的 ...

最新文章

  1. 使用OpenCV和Python高效计算视频的总帧数
  2. 瑞星08试用版到期了,下面装个什么杀毒软件比较好呢?
  3. 第一章 Linux内核简介
  4. 编程之美-寻找发帖“水王”方法整理
  5. 20-umask命令
  6. 七步从AngularJS菜鸟到专家(7):Routing
  7. 【英语学习】【WOTD】scrumptious 释义/词源/示例
  8. python开发网络小工具_Python 实现简单网络应用程序开发
  9. 深入浅出设计模式---1、设计模式原则和分类
  10. 空城机在CSDN的四周年创作纪念日
  11. 【高中数学】数列 · 通项求法
  12. QT绘制不规则多边形
  13. 《陰陽師·付喪神卷·瓜仙人》原作:梦枕貘
  14. B-spline曲线基函数计算Matlab程序
  15. Python基础,day2
  16. 计算机的存储器有哪2类,存储器有哪两种
  17. SMPL源码实现及相关问题
  18. 无线传感器网络技术中的关键性问题
  19. 撸一撸简单的操作系统知识
  20. 任务3-1(JavaScript基础)

热门文章

  1. sketch_apr04a:82:4: error: stray ‘\302‘ in programsketch_apr04a:82:4: error: stray ‘\240‘ in progra
  2. 网络连接出现意外错误的解决办法
  3. Java实现 word.excel等文档在线预览
  4. ARM/Linux/嵌入式/驱动必需知道的官网网站
  5. 陈皓:谈谈数据安全和云存储
  6. Python 区间库 interval
  7. 程序猿出马,鲁迅终于不用背黑锅了?!
  8. 分享:笔记本花屏的解决方法
  9. 读书笔记之C Primer Plus 1
  10. 2022新版妹子写真网站源码+UI非常精美