• 题解:

    • 令$F$为欢乐度$f(x) = Ox^2 + Sx + U$的生成函数,常数项为$0$;
    • 令$G(x) = \sum_{i=0}^{A} F^i (x) $
    • $ans = [x^M]G;$
    • 模数比较麻烦所以我用的分治求:
    • 如果现在要求$0$到$n-1$的$G_{n} = \sum_{i=0}^{n-1}F^{i}$和$F_{n} = F^{n} $,假设n为偶数;
    • 那么分治求出关于$n/2$的答案$G_{\frac{n}{2}}$和$F_{\frac{n}{2}}$
    • $$G_{n} = (F_{\frac{n}{2}}+1)G_{\frac{n}{2}}  , F_{n} = F_{\frac{n}{2}}^2$$
    • 如果$n$是奇数先算用上述操作算$n-1$,再把$F_{n-1}$补加给$G_{n-1}$得到$G_{n}$,最后$F_{n-1}$另外乘一次得到$F_{n}$;
    • 和快速幂的思想差不多;
    •  #include<bits/stdc++.h>
      #define ld double
      using namespace std;
      const int N=;
      const ld pi=acos(-);
      int M,P,A,O,S,U,len,L,rev[N];
      struct C{
      ld x,y;
      C(ld _x=,ld _y=):x(_x),y(_y){};
      C operator +(const C&A)const{return C(x+A.x,y+A.y);}
      C operator -(const C&A)const{return C(x-A.x,y-A.y);}
      C operator *(const C&A)const{return C(x*A.x-y*A.y,x*A.y+y*A.x);}
      C operator /(const ld&A)const{return C(x/A,y/A);}
      }f[N],g[N],t[N];
      int cal(int x){return (O*x*x+S*x+U)%P;}
      void fft(C*a,int f){
      for(int i=;i<len;++i)if(i<rev[i])swap(a[i],a[rev[i]]);
      for(int i=;i<len;i<<=){
      C wn=C(cos(pi/i),f*sin(pi/i));
      for(int j=;j<len;j+=i<<){
      C w=C(,);
      for(int k=;k<i;++k,w=w*wn){
      C x=a[j+k],y=w*a[j+k+i];
      a[j+k]=x+y,a[j+k+i]=x-y;
      }
      }
      }
      if(!~f)for(int i=;i<len;++i){
      a[i]=a[i]/len;
      a[i].x=int(a[i].x+0.1)%P;
      a[i].y=;
      }
      }
      void solve(int A){
      if(A==){g[].x=;return;}
      solve(A>>);
      fft(f,);fft(g,);
      for(int j=;j<len;++j)g[j]=g[j]*(f[j]+C(,)),f[j]=f[j]*f[j];
      fft(f,-);fft(g,-);
      for(int j=M+;j<len;++j)f[j].x=g[j].x=;
      if(A&){
      for(int j=;j<=M;++j)g[j].x=(int)(g[j].x+f[j].x+0.1)%P;
      fft(f,);for(int j=;j<len;++j)f[j]=f[j]*t[j];
      fft(f,-);for(int j=M+;j<len;++j)f[j].x=;
      }
      }
      int main(){
      // freopen("P5075.in","r",stdin);
      // freopen("P5075.out","w",stdout);
      scanf("%d%d%d%d%d%d",&M,&P,&A,&O,&S,&U);
      for(int i=;i<=M;++i)t[i].x=f[i].x=cal(i%P);
      for(len=;len<=M<<;len<<=,L++);
      for(int i=;i<len;++i)rev[i]=(rev[i>>]>>)|((i&)<<(L-));
      fft(t,);solve(min(A,M)+);
      printf("%d\n",(int)(g[M].x+0.1)%P);
      return ;
      }

LGP5075【JSOI2012】分零食的更多相关文章

  1. 【BZOJ 4332】 4332: JSOI2012 分零食 (FFT+快速幂)

    4332: JSOI2012 分零食 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 119  Solved: 66 Description 这里是欢乐 ...

  2. [BZOJ 4332] [JSOI2012]分零食(DP+FFT)

    [BZOJ 4332] [JSOI2012]分零食(DP+FFT) 题面 同学们依次排成了一列,其中有A位小朋友,有三个共同的欢乐系数O,S和U.如果有一位小朋友得到了x个糖果,那么她的欢乐程度就是\ ...

  3. bzoj4332;vijos1955:JSOI2012 分零食

    描述 这里是欢乐的进香河,这里是欢乐的幼儿园. 今天是2月14日,星期二.在这个特殊的日子里,老师带着同学们欢乐地跳着,笑着.校长从幼儿园旁边的小吃店买了大量的零食决定分给同学们.听到这个消息,所有同 ...

  4. bzoj 4332:JSOI2012 分零食

    描述 这里是欢乐的进香河,这里是欢乐的幼儿园. 今天是2月14日,星期二.在这个特殊的日子里,老师带着同学们欢乐地跳着,笑着.校长从幼儿园旁边的小吃店买了大量的零食决定分给同学们.听到这个消息,所有同 ...

  5. bzoj 4332: JSOI2012 分零食 快速傅立叶变换

    题目: Description 同学们依次排成了一列,其中有A位小朋友,有三个共同的欢乐系数O,S和U.如果有一位小朋友得到了x个糖果,那么她的欢乐程度就是\(f(x)=O*x^2+S*x+U\) 现 ...

  6. bzoj千题计划309:bzoj4332: JSOI2012 分零食(分治+FFT)

    https://www.lydsy.com/JudgeOnline/problem.php?id=4332 因为如果一位小朋友得不到糖果,那么在她身后的小朋友们也都得不到糖果. 所以设g[i][j] ...

  7. BZOJ4332 JSOI2012 分零食 【倍增 + NTT】

    题目链接 权限题BZOJ4332 题解 容易想到\(dp\) 设\(g[i][j]\)表示前\(i\)人分到\(j\)颗糖的所有方案的乘积之和 设\(f(x) = Ox^2 + Sx + U\) \[ ...

  8. bzoj4332[JSOI2012]分零食

    一下午被这题的精度续掉了...首先可以找出一个多项式的等比数列的形式,然后类似poj的Matrix Series,不断倍增就可以了.用复数点值表示进行多次的多项式运算会刷刷地炸精度...应当用int存 ...

  9. [洛谷P5075][JSOI2012]分零食

    题目大意:有$m(m\leqslant10^8)$个人站成一排,有$n(n\leqslant10^4)$个糖果,若第$i$个人没有糖果,那么第$i+1$个人也没有糖果.一个人有$x$个糖果会获得快乐值 ...

  10. BZOJ 4332: JSOI2012 分零食 FFT+分治

    好题好题~ #include <bits/stdc++.h> #define N 50020 #define ll long long #define setIO(s) freopen(s ...

随机推荐

  1. 小程序与WebRTC联姻能擦出怎样的火花?

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯视频云终端团队发表于云+社区专栏 腾讯视频云终端技术总监,rexchang(常青), 2008 年毕业加入腾讯,一直从事客户端研发 ...

  2. 基于C#的机器学习--贝叶斯定理-执行数据分析解决肇事逃逸之谜

    贝叶斯定理-执行数据分析解决肇事逃逸之谜 ​ 在这一章中,我们将: 应用著名的贝叶斯定理来解决计算机科学中的一个非常著名的问题. 向您展示如何使用贝叶斯定理和朴素贝叶斯来绘制数据,从真值表中发现异常值 ...

  3. fs - 文件系统

    fs 模块提供了一些 API,用于以一种类似标准 POSIX 函数的方式与文件系统进行交互. 用法如下: const fs = require('fs'); 所有的文件系统操作都有异步和同步两种形式. ...

  4. PyCharm配置SFTP远程调试Django应用

    http://www.ithao123.cn/content-41747.html http://www.th7.cn/system/lin/201703/205998.shtml

  5. DataRow对象的RowState和DataRowVersion属性特点

    DataRow对象有两个比较重要的属性,分别是行状态(RowState)和行版本(DataRowVersion),通过这两个属性能够有效的管理表中的行.下面简要的介绍一下行状态和行版本的特点和关系. ...

  6. TeamWork#2,Week 5,Our Measurement of Contribution to the Team

    经过了今天下午将近两个小时的激烈讨论,我们最终确定了我们的团队贡献分的分配方式,这种方式是我们团队都能接受的. 我们的分配方式一定程度上借鉴了valve公司的队友评估原则,但是又不单单是这样.我们的分 ...

  7. 2-Tenth Scrum Meeting20151210

    任务分配 闫昊: 今日完成:请假.(编译) 明日任务:参加会议讨论,安排任务分工. 唐彬: 今日完成:请假.(编译) 明日任务:参加会议讨论,安排任务分工. 史烨轩: 今日完成:请假.(编译) 明日任 ...

  8. 编程之法section II: 2.1 求最小的k个数

    ====数组篇==== 2.1 求最小的k个数: 题目描述:有n个整数,请找出其中最小的k个数,要求时间复杂度尽可能低. 解法一: 思路:快排后输出前k个元素,O(nlogn). writer: zz ...

  9. mvc拦截请求IHttpModule

    代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste ...

  10. Apollo配置名词-学习1

    文章:Apollo分布式配置中心部署以及使用 部署环境为DEV(开发环境).FAT(测试环境).UAT(预生产).PRO(生产)