【CF891E】Lust 生成函数】的更多相关文章

传送门 设在某一次操作之后的\(a\)数组变为了\(a'\)数组,那么\(\prod\limits_{i \neq x} a_i = \prod a_i - \prod a_i'\).那么就不难发现我们需要求的是进行这\(k\)次操作之后的\(a\)数组所有数的乘积的期望值. 注意到当第\(i\)个数被减去\(p_i\)次,那么方案数就是\(\frac{k!}{\prod p_i!}\),那么考虑指数型生成函数求解.那么第\(i\)个数的生成函数就是\(\sum\limits_{j \geq 0…
[CF891E]Lust 题意:给你一个长度为n的序列$a_i$,对这个序列进行k次操作,每次随机选择一个1到n的数x,令$res+=\prod\limits_{i!=x}a_i$(一开始res=0),然后$a_i$--.问最终res的期望值.答案在模意义下对$10^9+7$取模. $n\le 5000,k\le 10^9$ 题解:首先需要发现,假如第i个数被减的次数为$b_i$,则$res=\prod\limits_i a_i-\prod\limits_i (a_i-b_i)$.这个用归纳法容…
传送门 题目大意 你有 \(n\) 个数 \(a_1,a_2...a_n\) 要进行 \(k\) 次操作 每次随机选择一个数 \(x\),使得答案加上 \(\prod_{i \neq x}a_i\) ,并将 \(a_x\) 减去 \(1\) 求最后答案的期望,对 \(1e9+7\) 取模 Sol 设 \(b_i\) 表示 \(i\) 选择了多少次 把对 \(a_x\) 的一次操作的贡献看成是 \[\prod a_i−\prod a′_i\] 其中 \(a′_i\) 表示将 \(a_x\) 减去…
Codeforces 题面传送门 & 洛谷题面传送门 NaCly_Fish:<简单>的生成函数题 然鹅我连第一步都没 observe 出来 首先注意到如果我们按题意模拟那肯定是不方便计算贡献的,因此考虑对题目的问法进行一些转化.<显然>,对于一种操作序列而言,其操作完之后答案的值,就是原来 \(a_i\) 的乘积减去操作后所有 \(a_i\) 的乘积,因为每次操作前后答案与所有 \(a_i\) 的乘积之和是个定值.因此问题可以转化为,求操作之后所有 \(a_i\) 的乘积的…
题目大意: 两个人玩取数游戏,第一个人分数一开始是a,第二个分数一开始是b,接下来t轮,每轮两人都选择一个[-k,k]范围内的整数,加到自己的分数里,求有多少种情况使得t轮结束后a的分数比b高.  (1 ≤ a, b ≤ 100, 1 ≤ k ≤ 1000, 1 ≤ t ≤ 100) 1.我一开始的想法是DP出玩i轮得分是j的方案数.然后状态数最多有t*(2*k*t)那么多,最坏情况下会有2e7那么多的状态,转移必须是O(1)的. dp[i][j]=sum(dp[i-1][j-k....j+k]…
题意:给n种房子,每种房子有一个值val和个数cnt,现在要把这些房子分成两部分,争取两部分总值相等,如果不能相等,让A>B,且A-B最小. 解法:先跑一次生成函数,c[n]表示组成总值为n的方法种数,然后从Total/2~0枚举B的总值,如果c[i]不为0,说明可以达到 i 这个状态,说明这就是B的最接近A的值(因为最接近Total/2).算法复杂度较高.跑了1600多ms,不知道还有没有更优的算法. 代码: #include <iostream> #include <cstdi…
这题跟上两题也差不多. 把150以内的素数找出来,把素数的值看做硬币的面值,每个硬币的个数即ceil(150/prime[i]),因为再多也没用,最多组成n=150就行了,所以又回到了找硬币问题.用生成函数解之. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std…
生成函数题. 题意:有币值1,2,5的硬币若干,问你最小的不能组成的币值为多少. 解法:写出生成函数: 然后求每项的系数即可. 因为三种硬币最多1000枚,1*1000+2*1000+5*1000=8000,那么多项式乘积的最高次数为8000 用c保存累计相乘各项的系数,tc保存c和当前项相乘的系数 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> us…
首先 1+x+x^2+x^3+...+x^∞=1/(1-x) 对于题目中的几种食物写出生成函数 (对于a*x^b , a表示方案数 x表示食物,b表示该种食物的个数) f(1)=1+x^2+x^4+...+x^∞=1/(1-x^2) f(2)=1+x f(3)=1+x+x^2 f(4)=x+x^3+x^5+...+x^∞=x/(1-x^2) f(5)=1+x^4+x^8+...+x^∞=1/(1-x^4) f(6)=1+x+x^2+x^3 f(7)=1+x f(8)=1+x^3+x^6+...+…
C# 条形码 生成函数 (Code 128 标准参考:GB/T 18347-2001) 最近在做单据打印,发现客户要求用到条形码,在网上找了,发现只有一些条形码的标准,但打出来发现根本不能扫,还要加某些字体.   以下代码经过实际扫描测试~!        /// <summary>       /// 生成条形码( 128条码,标准参考:GB/T 18347-2001 )       /// BY JUNSON 20090508       /// </summary>     …