bzoj 4332: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取模后的结果。

 

看到很多大佬虐这道题,我也很好奇就写了写。

题里直接给了个生成函数$c$和一个卷积的形式$c^x$,如果题里没有要求拿到糖的人是一个前缀的话直接令$c[0]=1$求一发多项式快速幂就行了。

但有了限制之后,考虑枚举得到糖的人数,因为不能有人没有糖,令$c[0]=0$。

设$f[i]$表示只有i个糖时的答案,最后答案为$f[m]$,则

$$f=\sum_{i=1}^{A}c^i$$

感觉如果模数合适的话应该可以等比数列求和直接做吧。。。开始还以为是一道水题

但显然这道题不行,那就考虑倍增。

设$g[i]=c^{2^i},sumg[i]=\sum_{i=1}^{2^i}c^i$

把$A$二进制拆分后用上边两个数组显然是可以求出来的,懒得写了。。。

注意FFT完往回赋值时只赋$0-m$,不要把FFT完的整个数组都赋回去,调了一晚上不知道哪错了。。。

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<algorithm>
  4 #include<cstring>
  5 #include<cmath>
  6 #define pi acos(-1)
  7 #define N 50005
  8 #define double long double
  9 using namespace std;
 10 struct E
 11 {
 12     double x,y;
 13     E(){;}
 14     E(double _x,double _y)
 15     {
 16         x=_x;y=_y;
 17     }
 18     friend E operator + (E a,E b)
 19     {
 20         return E(a.x+b.x,a.y+b.y);
 21     }
 22     friend E operator - (E a,E b)
 23     {
 24         return E(a.x-b.x,a.y-b.y);
 25     }
 26     friend E operator / (E a,double b)
 27     {
 28         return E(a.x/b,a.y/b);
 29     }
 30     friend E operator * (E a,E b)
 31     {
 32         return E(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);
 33     }
 34 }a[N],b[N];
 35 int R[N],n;
 36 void fft(E *a,int f)
 37 {
 38     for(int i=0;i<n;i++)if(i<R[i])swap(a[i],a[R[i]]);
 39     for(int i=1;i<n;i<<=1)
 40     {
 41         E wn(cos(pi/i),f*sin(pi/i));
 42         for(int j=0;j<n;j+=(i<<1))
 43         {
 44             E w(1,0);
 45             for(int k=0;k<i;k++,w=w*wn)
 46             {
 47                 E x=a[j+k],y=w*a[j+k+i];
 48                 a[j+k]=x+y;a[j+k+i]=x-y;
 49             }
 50         }
 51     }
 52     if(f==-1)
 53     {
 54         for(int i=0;i<n;i++)a[i]=a[i]/(double)n;
 55     }
 56     return ;
 57 }
 58 int m,p,A,O,S,U;
 59 int c[N];
 60 int g[15][N],sg[15][N];
 61 void make(int *a1,int *a2,int *a3)
 62 {
 63     for(int i=0;i<n;i++)a[i].x=a[i].y=b[i].x=b[i].y=0;
 64     for(int i=0;i<n;i++)a[i].x+=a2[i];
 65     for(int i=0;i<n;i++)b[i].x+=a3[i];
 66     fft(a,1);fft(b,1);
 67     for(int i=0;i<n;i++)a[i]=a[i]*b[i];
 68     fft(a,-1);
 69     for(int i=0;i<=m;i++)a1[i]=(int)(a[i].x+0.2);
 70     for(int i=0;i<=m;i++)a1[i]%=p;
 71 }
 72 int gg[N];
 73 void solve()
 74 {
 75     for(int i=0;i<n;i++)g[0][i]=c[i];
 76     for(int i=1;i<=13;i++)make(g[i],g[i-1],g[i-1]);
 77     for(int i=0;i<n;i++)sg[0][i]=c[i];
 78     for(int i=1;i<=13;i++)
 79     {
 80         for(int j=0;j<n;j++)sg[i][j]=sg[i-1][j];
 81         make(gg,sg[i-1],g[i-1]);
 82         for(int j=0;j<n;j++)
 83         {
 84             sg[i][j]=sg[i][j]+gg[j];    
 85             if(sg[i][j]>=p)sg[i][j]-=p;
 86         }
 87     }
 88     return ;
 89 }
 90 int ans[N],now[N];
 91 void pw(int y)
 92 {
 93     now[0]=1;
 94     for(int i=13;i>=0;i--)
 95     {
 96         if(y&(1<<i))
 97         {
 98             make(gg,now,sg[i]);
 99             make(now,now,g[i]);
100             for(int j=0;j<n;j++)
101             {
102                 ans[j]=ans[j]+gg[j];
103                 if(ans[j]>=p)ans[j]-=p;
104             }
105         }
106     }
107     return ;
108 }
109 int main()
110 {
111     scanf("%d%d%d%d%d%d",&m,&p,&A,&O,&S,&U);
112     S%=p;O%=p;U%=p;
113     for(int i=1;i<=m;i++)c[i]=(1LL*O*i*i%p+1LL*S*i%p+U)%p;
114     n=1;int l=0;
115     while(n<=2*m)n<<=1,l++;
116     for(int i=0;i<n;i++)R[i]=(R[i>>1]>>1)|((i&1)<<(l-1));
117     if(A>m)A=m;
118     solve();
119     pw(A);
120     printf("%d\n",ans[m]);
121     return 0;
122 }

 

转载于:https://www.cnblogs.com/ezyzy/p/6618613.html

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

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

相关文章

并发–顺序线程和原始线程

我不久前参与了一个项目&#xff0c;该项目的报告流程如下&#xff1a; 用户会要求举报 报告要求将被翻译成较小的部分 每个零件的报告将基于零件/节的类型由报告生成器生成 组成报告的各个部分将重新组合成最终报告&#xff0c;并返回给用户 我的目标是展示如何从错误的实…

借贷期末余额 oracle,应交税费期末余额分别在借贷方表示什么

应交税费是负债类科目&#xff0c;有时期末余额会在借方&#xff0c;有时会在贷方。因此&#xff0c;小伙伴们在实际的账务处理工作中&#xff0c;一定要弄清楚两者的含义。为了帮助大家进行有更进一步的理解&#xff0c;小编再次汇总了应交税费期末余额分别在借贷方表示什么的…

Android学习——ListView的缓存机制

在使用ListView的时候&#xff0c;需要加载适配器和数据源&#xff0c;这篇文章主要介绍一下ListView的使用以及利用ListView的缓存机制来减少系统的初始化时间。 ListView的使用 ListView和ViewPager很类似&#xff0c;首先在ArrayList中存放数据源&#xff0c;并把它作为Adap…

C#基础 特殊集合(栈集合、队列集合、哈希表集合)

一、 栈: Stank,先进先出&#xff0c;一个一个赋值&#xff0c;一个一个取值&#xff0c;按照顺序。 .count 取集合内元素的个数 .push 将元素一个一个推入集合 .pop 将元素一个一个弹出集合 .peek 查看集合中的一个元素 .clear 清空集合 Stack stnew Stack…

OSGi环境中的Servlet基本身份验证

您首先需要获得对OSGI HTTP Service的引用。 您可以通过声明性服务来做到这一点。 这篇文章将集中在获得对HTTP服务的引用之后的步骤。 注意&#xff1a;此职位的完整课程位于此处 通过OSGI HTTP Service注册Servlet时&#xff0c;它为您提供了提供HTTPContext实现的选项。 htt…

linux夏令时配置文件,Linux夏令时是怎么调整的?

以法国巴黎为例&#xff1a;root121 zoneinfo]# ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime[root121 zoneinfo]# date2015年 10月 13日 星期二 03:45:09 CEST[root121 zoneinfo]# date -RTue, 13 Oct 2015 03:45:31 0200[root121 zoneinfo]# zdump -v /etc/localt…

Kali Linux渗透基础知识整理(二)漏洞扫描

Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量NmapHping3NessuswhatwebDirBusterjoomscanWPScan网络流量 网络流量就是网络上传输的数据量。 TCP协议 TCP是因特网中的传输层协议&#xff0c;使用三次握手协议建立连接。当主动方发出SYN连接请求后&#xff0c;等待…

嵌入式软件设计第09实验报告

学号&#xff1a;140201133 姓名&#xff1a;李宇昕 组别&#xff1a;第3组 实验地点&#xff1a;D19 一、实验目的&#xff1a; 1.熟悉WWW技术中的SSI&#xff08;Server Side Include&#xff09;技术。 2.学会使用SSI技术编写代码把当前开发板内…

TeamCity工件:HTTP,Ant,Gradle和Maven

您可以通过几种方式检索TeamCity工件&#xff1f; 我说有很多选择 &#xff01; 如果您使用的是Java构建工具&#xff0c;那么可以使用简单的HTTP请求&#xff0c;Ant Ivy&#xff0c;Gradle和Maven下载和使用TeamCity构建配置生成的二进制文件。 怎么样&#xff1f; 继续阅读…

linux中hadoop命令大全,hadoop常用命令

启动Hadoop进入HADOOP_HOME目录。执行sh bin/start-all.sh关闭Hadoop进入HADOOP_HOME目录。执行sh bin/stop-all.sh1、查看指定目录下内容hadoop dfs –ls [文件目录]eg: hadoop dfs –ls /user/wangkai.pt2、打开某个已存在文件hadoop dfs –cat [file_path]eg:hadoop dfs -ca…

Uber从Postgres切换到MySQL

Uber工程师在官方博客上描述了他们为什么要从 Postgres 切换到 MySQL 数据库。Uber的早期架构是由 Python编写的后端应用构成&#xff0c;使用了 Postgres 数据库。但此后&#xff0c;Uber的架构发生了显著的改变&#xff0c;转变到了微服务模型和新的数据平台。以前他们使用 P…

AutoCAD如何方便截图放到Word文档,改成白底黑字

将模型视图切换到布局2即可 比如下图所示的效果 先回到模型视图把所有线条颜色都改成白色&#xff0c;然后添加适当的标注&#xff08;比如要受力分析&#xff0c;则在CAD中绘制箭头也很方便的&#xff09;&#xff0c;文字说明。然后切换到布局2就OK 可以截图了。 转载于:http…

在Hotspot JVM中跟踪过多的垃圾回收

由于内存泄漏或其他内存问题&#xff0c;经常导致应用程序冻结&#xff0c;仅使垃圾收集器&#xff08;GC&#xff09;进程运行失败&#xff0c;试图释放一些空间。 直到看门狗&#xff08;或沮丧的管理员&#xff09;重新启动应用程序并且问题从未解决之前&#xff0c;这种情况…

linux 网络在线升级,linux在线升级

//前提信息&#xff1a;1.系统分区信息SPI-Flash:[0] 0x000000000000-0x000000020000 : "SPL,128KB"[1] 0x000000020000-0x0000000e0000 : "U-Boot,768KB"[2] 0x0000000e0000-0x000000100000 : "U-Boot Env,128KB"[3] 0x000000100000-0x00000020…

XML反序列化出错,XML 文档(2, 2)中有错误

XML转换为实体类的错误处理方案 一.错误描述&#xff1a; XML反序列化出错&#xff0c;XML 文档(2, 2)中有错误二.解决方案&#xff1a; 在实体类的字段要加上XmlElement属性三.具体实现: 1.XML文档 <EVENT_INSTANCE><EventType>ALTER_TABLE</EventType><…

iOS--支付宝环境集成

1.下载支付宝SDK以及Demo https://doc.open.alipay.com/doc2/detail?treeId54&articleId103419&docType1 2.新建文件夹“AliSDK”&#xff0c;将压缩包内的文件拷贝到该文件夹下&#xff0c;完成后如下图所示&#xff1a; 3.将文件夹拷贝到项目中&#xff0c; 4.执行完…

再见,再见,5 * 60 * 1000 //五分钟,再见,再见

在这篇文章中&#xff0c;我将讨论一个在1.5版中首次引入的类&#xff0c;我使用了太多&#xff0c;但是与一些人交谈&#xff0c;他们说他们不知道它的存在。 此类是TimeUnit 。 TimeUnit类表示给定粒度单位的持续时间&#xff0c;还提供了转换为不同单位的实用方法以及执行计…

windows如何调用Linux的API,Windows和Native API中的系统调用?

最近&#xff0c;我在* NIX操作系统中使用了很多汇编语言。我想知道Windows域。Linux中的调用约定&#xff1a;mov $SYS_Call_NUM, %eaxmov $param1 , %ebxmov $param2 , %ecxint $0x80而已。这就是我们应该如何在Linux中进行系统调用。linux中所有系统调用的参考&#xff1a;关…

maven生命周期和插件

maven生命周期和插件 生命周期 maven的生命周期有三套&#xff0c;互相独立。每个生命周期含有不同阶段&#xff0c;常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作clean 清理上一次构建生成的文件post-clean 执行清理后需要完成的工作default 构建项目 validate…

Java EE 6测试第二部分– Arquillian和ShrinkWrap简介

在Java EE 6测试的第一部分中&#xff0c;我简要介绍了使用Glassfish嵌入式容器的EJB 3.1 Embeddable API&#xff0c;以演示如何启动该容器&#xff0c;如何在项目类路径中查找bean以及运行非常简单的集成测试。 这篇文章重点介绍Arquillian和ShrinkWrap以及为什么它们是用于企…