P5075-[JSOI2012]分零食【dp,生成函数,FFT】

正题

题目链接:https://www.luogu.com.cn/problem/P5075


题目大意

mmm个糖分给AAA个小朋友,得到xxx个糖的小朋友可以贡献F(x)=Ox2+Sx+UF(x)=Ox^2+Sx+UF(x)=Ox2+Sx+U的贡献值。要求没有得到糖的小朋友一定是后面一段连续的序列,求所有方案的贡献值乘积之和。


解题思路

显然如果A>mA>mA>m那么后面的小朋友一定分不到糖,那么有A=min{A,m}A=min\{A,m\}A=min{A,m}

dpdpdp思路

fi,jf_{i,j}fi,j表示iii个小朋友分了jjj个糖的贡献值之和
那么有fi,j=∑k=1jfi−1,j−k∗F(k)f_{i,j}=\sum_{k=1}^jf_{i-1,j-k}*F(k)fi,j=k=1jfi1,jkF(k)
发现这是一个卷积的形式,可以写为fi=fi−1∗Ff_{i}=f_{i-1}*Ffi=fi1Ffn=f0∗Fnf_n=f_0*F^nfn=f0Fn
然后设gi,j=∑k=1ifk,jg_{i,j}=\sum_{k=1}^if_{k,j}gi,j=k=1ifk,j,那么答案就是gA,mg_{A,m}gA,m
然后优化转移gi,j=∑k=1i2fk,j+∑k=i2+1ifk,jg_{i,j}=\sum_{k=1}^{\frac{i}{2}}f_{k,j}+\sum_{k=\frac{i}{2}+1}^if_{k,j}gi,j=k=12ifk,j+k=2i+1ifk,j
gi,j=gi2,j+∑k=1i2fk,j∗fi2,jg_{i,j}=g_{\frac{i}{2},j}+\sum_{k=1}^\frac{i}{2}f_{k,j}*f_{\frac{i}{2},j}gi,j=g2i,j+k=12ifk,jf2i,j
卷积展开∑k=1i2fk,j∗fi2,j\sum_{k=1}^\frac{i}{2}f_{k,j}*f_{\frac{i}{2},j}k=12ifk,jf2i,j
gi,j=gi2,j+(∑k=1m−1fk,j)∗gi2,jg_{i,j}=g_{\frac{i}{2},j}+(\sum_{k=1}^{m-1}f_{k,j})*g_{\frac{i}{2},j}gi,j=g2i,j+(k=1m1fk,j)g2i,j
gi=gi2+gi2∗fi2g_i=g_\frac{i}{2}+g_\frac{i}{2}*f_{\frac{i}{2}}gi=g2i+g2if2i
然后FFTFFTFFT优化即可,时间复杂度O(mlog⁡2m)O(m\log^2 m)O(mlog2m)

生成函数思路

F(x)=∑k=0∞f(k)xkF(x)=\sum_{k=0}^\infty f(k)x^kF(x)=k=0f(k)xk
如果有kkk个人拿到糖那么就是(F(x)−1)k(F(x)-1)^k(F(x)1)k
然后答案就是∑k=0A(F(x)−1)k\sum_{k=0}^A(F(x)-1)^kk=0A(F(x)1)k
⇒1−(F(x)−1)A+12−F(x)\Rightarrow \frac{1-(F(x)-1)^{A+1}}{2-F(x)}2F(x)1(F(x)1)A+1
然后上多项式求逆和快速幂就好了
时间复杂度O(mlog⁡2m)O(m\log^2 m)O(mlog2m)

当然我是fwfwfw所以写的是dpdpdp的代码


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define Pi acos(-1)
using namespace std;
const int N=40000;
struct complex{double x,y;complex(double xx=0,double yy=0){x=xx;y=yy;}
}ca[N],cb[N];
int n,m,P,A,O,S,U,r[N],tmp[N],f[N],g[N],pre[N]; 
complex operator+(complex a,complex b)
{return complex(a.x+b.x,a.y+b.y);}
complex operator-(complex a,complex b)
{return complex(a.x-b.x,a.y-b.y);}
complex operator*(complex a,complex b)
{return complex(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
void fft(complex *f,int op){for(int i=0;i<n;i++)if(i<r[i])swap(f[i],f[r[i]]);for(int p=2;p<=n;p<<=1){int len=p>>1;complex tmp(cos(Pi/len),sin(Pi/len)*op);for(int k=0;k<n;k+=p){complex buf(1,0);for(int i=k;i<k+len;i++){complex tt=buf*f[i+len];f[i+len]=f[i]-tt;f[i]=f[i]+tt;buf=buf*tmp;}}}return;
}
void mul(int *a,int *b,int *c){for(int i=0;i<n;i++)ca[i]=complex(a[i],0),cb[i]=complex(b[i],0);fft(ca,1);fft(cb,1);for(int i=0;i<n;i++)ca[i]=ca[i]*cb[i];fft(ca,-1);for(int i=1;i<=m;i++)c[i]=int((double)ca[i].x/n+0.5)%P;return;
}
void power(int b){if(b==1){memcpy(f,pre,sizeof(f));memcpy(g,pre,sizeof(g));return;}power(b>>1);mul(f,g,tmp);for(int i=0;i<n;i++)(g[i]+=tmp[i])%=P;mul(f,f,f);if(b&1){mul(f,pre,f);for(int i=0;i<n;i++)(g[i]+=f[i])%=P;}return;
}
int main()
{scanf("%d%d%d%d%d%d",&m,&P,&A,&O,&S,&U);for(int i=1;i<=m;i++)pre[i]=(O*i*i%P+S*i%P+U)%P;for(n=1;n<=m*2;n<<=1);for(int i=0;i<n;i++)r[i]=(r[i>>1]>>1)|((i&1)?n>>1:0);power(min(A,m));printf("%d",g[m]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【模拟】【递归】解压字符串(jzoj 1519)

解压字符串 jzoj 1519 题目大意&#xff1a; 有一串压缩过的字符串&#xff0c;将有重复的压缩成了s(~~)的形式&#xff08;s是一位数&#xff0c;例子&#xff1a;123123123压缩成‘3&#xff08;123&#xff09;’&#xff09;&#xff0c;现在要你解压出来&#xff0c;然…

Educational Codeforces Round 48

Educational Codeforces Round 48 C.Vasya And The Mushrooms 思路很简单&#xff0c;走法有一个统一形式就是先上下走&#xff0c;然后到某个位置左右一个来回。然后就推一下&#xff0c;后边那段的递推式子&#xff0c;枚举改变走法的位置即可。看出做法之后发现要推个式子&a…

微软发布Azure Service Fabric Mesh公开预览版

Service Fabric现在在云端有了一个新亲戚——Azure Service Fabric Mesh&#xff0c;Azure的一个完全托管服务&#xff0c;开发人员现在可以基于此服务部署和运行容器化应用程序。在去年五月的Build 2018大会期间首次亮相后&#xff0c;现在开始进行公开预览。在Build 2018大会…

【DP】楼梯(jzoj 1520)

楼梯 jzoj 1520 题目大意&#xff1a; 有n个楼梯&#xff0c;跳跃高度初始值是1&#xff0c;当往后一层时&#xff0c;跳跃高度就2&#xff0c;当跳跃只能跳跃到当前能跳到楼梯&#xff0c;且跳跃之后&#xff0c;跳跃高度变回1&#xff0c;问跳到第n层最少花几步 样例输入…

P5502-[JSOI2015]最大公约数【分治】

正题 题目链接:https://www.luogu.com.cn/problem/P5502 题目大意 nnn个数&#xff0c;求一个L,RL,RL,R使得最大化(R−L1)∗gcd(aL,aL1,aL1...aR−1,aR)(R-L1)*gcd(a_L,a_{L1},a_{L1}...a_{R-1},a_R)(R−L1)∗gcd(aL​,aL1​,aL1​...aR−1​,aR​) 解题思路 考虑分治&#x…

牛客网暑期ACM多校训练营(第五场)

牛客网暑期ACM多校训练营&#xff08;第五场&#xff09; A. gpa 二分答案&#xff0c;然后就转化为是否满足\(\frac {\sum s[i]c[i]}{\sum s[i]} ≥ D\), \(\sum s[i]c[i] ≥ \sum s[i]D\), \(\sum s[i](c[i]-D) ≥ 0\) 显然科目越少gpa越高&#xff0c;于是去掉最小的k个判断…

.NET Core TDD前传: 编写易于测试的代码 -- 缝

有时候不是我们不想做单元测试, 而是这代码写的实在是没法测试....举个例子, 如果一辆汽车在产出后没完成测试, 那么没人敢去驾驶它. 代码也是一样的, 如果项目未能进行该做的测试, 那么客户就不敢去使用它, 即使使用了也会遇到“车祸”. 为什么要测试/测试的好处它可以尽早发现…

【数位DP】好数(jzoj 1521)

好数 jzoj 1521 题目大意&#xff1a; 定义好数为转换为二进制后&#xff0c;有至少三个连续的位相同的数&#xff0c;现在要求一个范围内的好数个数 样例输入 0 16样例输出 5数据范围限制 0 < Low < UP < 2147483647 提示 提示&#xff1a; 对于50%测试&…

P4294-[WC2008]游览计划【斯坦纳树】

正题 题目链接:https://www.luogu.com.cn/problem/P4294 题目大意 n∗mn*mn∗m的网格&#xff0c;每个格子的修建费用不同&#xff0c;要求修建费用最小连接所有关键点。 解题思路 设fs,i,jf_{s,i,j}fs,i,j​表示目前连接关键点状态为sss&#xff0c;在(i,j)(i,j)(i,j)这个位…

「LibreOJ NOIP Round #1」旅游路线

「LibreOJ NOIP Round #1」旅游路线 题目链接 做法&#xff1a; 首先肯定要预处理些东西&#xff0c;来使单词询问达到\(o(logn)\)或者\(o(1)\)的复杂度&#xff0c;又因为距离这个东西的范围太大&#xff0c;我们考虑预处理一些费用相关的东西。考虑\(dp[s][j]\)表示从s出发花…

【招聘(北京)】东方国信 工业互联网

从工业领域的业务出发&#xff0c;结合现有的物联网、大数据、云计算等技术进行体系化建设。自主研发的智能检测传感器、自主开发的部署在生产单位的专家系统、自主设计通讯交互协议、自主开发的工业物联网通讯框架、自主开发的分布式存储中间件、自主研发的机理模型&#xff0…

纪中C组模拟赛总结(2019.7.5)

成绩&#xff1a; rankrankrank是有算其他dalaodalaodalao的 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4888lyflyflyf300300300100100100100100100100100100000111111hkyhkyhky280280280100100100100100100808080000121212wjjwjjwjj2702702701001001001…

2020牛客NOIP赛前集训营提高组(第四场)B-色球【链表】

正题 题目链接:https://ac.nowcoder.com/acm/contest/7611/B 题目大意 nnn个杯子&#xff0c;mmm个操作 在第zzz个杯子中依次加入xxx个颜色为yyy的球在第yyy个杯子中取出xxx个球&#xff0c;并询问最后一个拿出的球将第xxx个杯子的球依次拿出放入第yyy个杯子中 解题思路 每次…

POJ3613

POJ3613 题意&#xff1a;n条边构成的最短路 做法&#xff1a;倍增floyd #include <cstdio> #include <cstring> #include <algorithm> #define rep(i,a,b) for(int ia;i<b;i) typedef long long ll; const int N 207; const int inf 0x3f3f3f3f; using…

Ocelot-基于.NET Core的开源网关实现

写在前面API网关是系统内部服务暴露在外部的一个访问入口&#xff0c;类似于代理服务器&#xff0c;就像一个公司的门卫承担着寻址、限制进入、安全检查、位置引导等工作&#xff0c;我们可以形象的用下图来表示&#xff1a; 外部设备需要访问内部系统服务时必须要通过我们的AP…

【模拟】阿里郎(jzoj 2012)

阿里郎 jzoj 2012 题目大意&#xff1a; 有一个数n&#xff0c;求出它的所有约数d&#xff0c;有多少个约数就分多少种情况&#xff0c;每次分为d组&#xff0c;把1,d1,2d1……n-d1分为一组&#xff0c;以此类推&#xff0c;把2,d2,2d2……n-d2分为另一组&#xff0c;然后同…

[2020.10.25NOIP模拟赛]序列【Splay】

正题 题目链接:https://www.luogu.com.cn/problem/U136336?contestId36038 题目大意 第iii次找到第iii大的数字位置xix_ixi​并且翻转[i,xi][i,x_i][i,xi​]&#xff0c;求输出序列xxx 解题思路 记录一下每个排名在SplaySplaySplay中的位置&#xff0c;然后暴力翻转即可。 …

HDU2476

HDU2476 做法&#xff1a; 先想到用\(f[i]\)表示A的前i个字符变成B的最少涂得次数&#xff0c;不难写出方程&#xff0c;当\(A[i]≠B[i], f[i] max(f[j-1]cost[j][i])\), 当\(A[i]B[i]\)时&#xff0c;\(f[i]f[j-1]\) , \(cost[i][j]\) 表示将i到j涂成和B一样的最少的次数。现…

Blazor 0.5.0 升级及新特性介绍

前言喜大普奔&#xff0c; Blazor 0.5.0 在我刷了好几遍 Github &#xff08;表示功不可没&#xff09;以后&#xff0c;终于在 2018年7月25日发布了&#xff01;[Blazor 0.5.0 Announce] (https://blogs.msdn.microsoft.com/webdev/2018/07/25/blazor-0-5-0-experimental-rele…

【dfs】通行证(jzoj 2013)

通行证 jzoj 2013 题目大意&#xff1a; 有一个图&#xff0c;走某一条路需要某个通行证&#xff08;数据给出所有可选择的&#xff09;&#xff0c;现在要从某个点到另一个点&#xff0c;问最少要多少个通行证 样例输入 3 3 3 0 2 0 0 2 1 1 2 2样例输出 2 0 2数据范围限…