bzoj4332;vijos1955:JSOI2012 分零食
描述
这里是欢乐的进香河,这里是欢乐的幼儿园。
今天是2月14日,星期二。在这个特殊的日子里,老师带着同学们欢乐地跳着,笑着。校长从幼儿园旁边的小吃店买了大量的零食决定分给同学们。听到这个消息,所有同学都安安静静地排好了队,大家都知道,校长不喜欢调皮的孩子。
同学们依次排成了一列,其中有A位小朋友,有三个共同的欢乐系数O,S和U。如果有一位小朋友得到了x个糖果,那么她的欢乐程度就是f(x)=Ox^2+Sx+U。
现在校长开始分糖果了,一共有M个糖果。有些小朋友可能得不到糖果,对于那些得不到糖果的小朋友来说,欢乐程度就是1。如果一位小朋友得不到糖果,那么在她身后的小朋友们也都得不到糖果。(即这一列得不到糖果的小朋友一定是最后的连续若干位)
所有分糖果的方案都是等概率的。现在问题是:期望情况下,所有小朋友的欢乐程度的乘积是多少?呆呆同学很快就有了一个思路,只要知道总的方案个数T和所有方案下欢乐程度乘积的总和S,就可以得到答案Ans=S/T。现在他已经求出来了T的答案,但是S怎么求呢?他就不知道了。你能告诉他么?
因为答案很大,你只需要告诉他S对P取模后的结果。
后记:
虽然大家都知道,即便知道了T,知道了S对P取模后的结果,也没有办法知道期望情况下,所有小朋友欢乐程度的乘积。但是,当呆呆想到这一点的时候,已经彻底绝望了。
格式
输入格式
第一行有2个整数,分别是M和P。
第二行有一个整数A,第三行有一个整数O。
第四行有一个整数S,第五行有一个整数U。
输出格式
一个整数S,因为答案可能很大,你只需要输出S 对P取模后的结果。
样例1
样例输入1
4 100
4
1
0
0
样例输出1
63
限制
对于40%的数据,M<=150。
对于60%的数据,M<=2000。
对于80%的数据,M<=6000。
对于100%的数据,M<=10000,P<=255,A<=10^8,O<=4,S<=300,U<=100。


恶心之极的题目……只能手推一个非常可怕的dp转移方程……详细内容看代码吧
#include<cstdio>
#define rec(x,y) rec[aa[y]+x]
using namespace std; int n,m,a,b,c,p,l1,l2,l3,l0;
int rec[],ans=,aa[],f[];
int main(){
scanf("%d%d%d%d%d%d",&m,&p,&n,&a,&b,&c);
register int i,j;
if (n>m) n=m;
aa[]=;
a%=p;b%=p;c%=p;
f[]=c;
for (i=;i<p;i++){
f[i]=f[i-]+a*(*i-)+b;
while (f[i]>=p) f[i]-=p;
}
for (i=;i<=m;i++) aa[i]=aa[i-]+i-;
for (i=,j=;i<=m;i++,j++,j-=j>=p?p:)
if (i>p) rec(,i)=rec(,(j==?p-:j-)+);else rec(,i)=f[j];
int k=((rec(,)-*rec(,))+*p)%p,y=(*a-rec(,)+*rec(,)+*p)%p;
ans=rec(,m);
for (i=;i<=n;i++){
rec(i,i)=(rec(i-,i-)*f[])%p;
int d=rec(i,i);
j=i+;
d+=((k*rec(i-,j-))+(f[]*rec(i-,j-)));
rec(i,j)=(*rec(i,j-)+d+p)%p;
j++;
l0=aa[j]+i;l1=aa[j-]+i-;l2=aa[j-]+i-;l3=aa[j-]+i-;
for (;j<=m;j++){
d+=((y*rec[l3])+(k*rec[l2])+(f[]*rec[l1]));
rec[l0]=(*rec[l1+]-rec[l2+]+d+p)%p;
l0+=j;l1+=j-;l2+=j-;l3+=j-;
}
ans+=rec(i,m);
}
printf("%d\n",ans%p);
}
UPD at 2017.4.8
原来我这样是暴力水过,有空再写写正解
bzoj4332;vijos1955:JSOI2012 分零食的更多相关文章
- 【BZOJ 4332】 4332: JSOI2012 分零食 (FFT+快速幂)
4332: JSOI2012 分零食 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 119 Solved: 66 Description 这里是欢乐 ...
- [BZOJ 4332] [JSOI2012]分零食(DP+FFT)
[BZOJ 4332] [JSOI2012]分零食(DP+FFT) 题面 同学们依次排成了一列,其中有A位小朋友,有三个共同的欢乐系数O,S和U.如果有一位小朋友得到了x个糖果,那么她的欢乐程度就是\ ...
- BZOJ4332 JSOI2012 分零食 【倍增 + NTT】
题目链接 权限题BZOJ4332 题解 容易想到\(dp\) 设\(g[i][j]\)表示前\(i\)人分到\(j\)颗糖的所有方案的乘积之和 设\(f(x) = Ox^2 + Sx + U\) \[ ...
- bzoj千题计划309:bzoj4332: JSOI2012 分零食(分治+FFT)
https://www.lydsy.com/JudgeOnline/problem.php?id=4332 因为如果一位小朋友得不到糖果,那么在她身后的小朋友们也都得不到糖果. 所以设g[i][j] ...
- bzoj4332[JSOI2012]分零食
一下午被这题的精度续掉了...首先可以找出一个多项式的等比数列的形式,然后类似poj的Matrix Series,不断倍增就可以了.用复数点值表示进行多次的多项式运算会刷刷地炸精度...应当用int存 ...
- bzoj 4332:JSOI2012 分零食
描述 这里是欢乐的进香河,这里是欢乐的幼儿园. 今天是2月14日,星期二.在这个特殊的日子里,老师带着同学们欢乐地跳着,笑着.校长从幼儿园旁边的小吃店买了大量的零食决定分给同学们.听到这个消息,所有同 ...
- bzoj 4332: JSOI2012 分零食 快速傅立叶变换
题目: Description 同学们依次排成了一列,其中有A位小朋友,有三个共同的欢乐系数O,S和U.如果有一位小朋友得到了x个糖果,那么她的欢乐程度就是\(f(x)=O*x^2+S*x+U\) 现 ...
- [洛谷P5075][JSOI2012]分零食
题目大意:有$m(m\leqslant10^8)$个人站成一排,有$n(n\leqslant10^4)$个糖果,若第$i$个人没有糖果,那么第$i+1$个人也没有糖果.一个人有$x$个糖果会获得快乐值 ...
- BZOJ 4332: JSOI2012 分零食 FFT+分治
好题好题~ #include <bits/stdc++.h> #define N 50020 #define ll long long #define setIO(s) freopen(s ...
随机推荐
- 【ANT】description元素和属性
<?xml version="1.0" ?> <project default="test"> <description> ...
- VR、AR、MR定义区别
近日, 获得谷歌5亿美元融资的技术公司Magic Leap在WSJD展会中放出了一段实录视频,引起不小骚动.如今,也有媒体称他们为MR公司,那么VR.AR.MR之间到底有什么区别呢. VR.AR.MR ...
- ArcGIS API for JavaScript 4.2学习笔记[9] 同一种视图不同数据(Map)同步
本例子核心:对MapView对象的map属性值进行替换即可达到更改地图数据的效果. 这个例子用的不是Map对象了,而是用的发布在服务器上的专题地图(WebMap)来加载到MapView上进行显示. 在 ...
- P神的SDFZ考试题 C题
探险[问题描述] 探险家小 T 好高兴! X 国要 ...
- bzoj 2119: 股市的预测
Description 墨墨的妈妈热爱炒股,她要求墨墨为她编写一个软件,预测某只股票未来的走势.股票折线图是研究股票的必备工具,它通过一张时间与股票的价位的函数图像清晰地展示了股票的走势情况.经过长时 ...
- 扩展1 - Python 获取当前时间的用法
1.先导入库:import datetime 2.获取当前日期和时间:now_time = datetime.datetime.now() 3.格式化成我们想要的日期:strftime() 比如:“2 ...
- 10 Easy Steps to a Complete Understanding of SQL
原文出处:http://tech.pro/tutorial/1555/10-easy-steps-to-a-complete-understanding-of-sql(已经失效,现在收集如下) Too ...
- linux大文件分包压缩和批量解压命令tar // tar 排除指定目录
压缩命令主要用到tar打包和split分割,命令如下: tar czf - aaa | split -b 1024m - bbb.tar.gz_ aaa可以是文件也可以是目录, 大小可以是b.k.m这 ...
- python中的if __name__=='__main__': main()解析
python中我们会看到一段代码是这样的: if __name__=='__main__': main() 这段代码的什么意思,我们可以知道代码的意思是如果__name__=='__main__'为T ...
- Struts2思维导图
自己感觉自己的知识不是很扎实,所以昨天留时间复习知识,昨天边复习边画了一个思维导图.不知道自己画的对不对,还没有画完.有错的地方大家请和我说.希望自己能更加牢固的记住这些知识. 不说废话,开图.图有点 ...