一下午被这题的精度续掉了...首先可以找出一个多项式的等比数列的形式,然后类似poj的Matrix Series,不断倍增就可以了.用复数点值表示进行多次的多项式运算会刷刷地炸精度...应当用int存多项式,然后卷积的时候再dft成复数,卷积之后idft回实数.注意两个m次的多项式卷积之后会变成2m次的多项式,多项式的后一半需要清零.

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=**;
#define double long double
const double pi=acos(-);
struct comp{
double x,y;
comp(){}
comp(double a,double b){x=a;y=b;}
comp operator +(const comp &a){return comp(x+a.x,y+a.y);}
comp operator -(const comp &a){return comp(x-a.x,y-a.y);}
comp operator *(const comp &a){return comp(x*a.x-y*a.y,x*a.y+y*a.x);}
} ;//a:存储原始多项式 b:存储原始多项式的卷积 c:存储答案 d:存储原多项式的n/2次方
int mod;
int a[maxn],c[maxn],d[maxn],e[maxn];
void fft(comp* a,int n,int sign){
for(int i=,j=,k=n;i<n;++i,k=n){
do j^=(k>>=);while(j<k);if(i<j)swap(a[i],a[j]);
}
for(int j=;j<=n;j<<=){
int m=j>>;comp wn(cos(pi*/j),sign*sin(pi*/j));
for(comp *p=a;p!=a+n;p=p+j){
comp w(,);
for(int k=;k<m;++k,w=w*wn){
comp t=p[m+k]*w;p[m+k]=p[k]-t;p[k]=p[k]+t;
}
}
}
if(sign==-){
for(int i=;i<n;++i)a[i].x/=n;
}
}
int N=;int m;
int mo(double x){
return (((int)floor(x+0.5))%mod+mod)%mod;
}
void mult(int *a,int *b,int *res){
static comp tmp1[maxn],tmp2[maxn];
for(int i=;i<N;++i)tmp1[i]=comp(a[i],),tmp2[i]=comp(b[i],);
fft(tmp1,N,);fft(tmp2,N,);
for(int i=;i<N;++i)tmp1[i]=tmp1[i]*tmp2[i];
fft(tmp1,N,-);
for(int i=;i<N;++i)res[i]=mo(tmp1[i].x);
}
void qsum(int n){
if(n==){
for(int i=;i<N;++i)c[i]=a[i];
for(int i=;i<N;++i)d[i]=a[i];
}else{
qsum(n>>);
mult(c,d,e);
//for(int i=0;i<N;++i)
//e[i]=c[i]*d[i]+c[i];
for(int i=;i<N;++i)c[i]=mo(c[i]+e[i]);
memset(c+(N>>),,sizeof(comp)*(N>>));
if(n&){
mult(c,a,e);
for(int i=;i<N;++i)c[i]=mo(a[i]+e[i]);
memset(c+(N>>),,sizeof(comp)*(N>>));
} mult(d,d,d);
memset(d+(N>>),,sizeof(comp)*(N>>)); if(n&){
mult(d,a,d);
memset(d+(N>>),,sizeof(comp)*(N>>));
} }
}
int main(){
scanf("%d%d",&m,&mod);
int n,o,s,u;scanf("%d%d%d%d",&n,&o,&s,&u);
n=min(n,m);
for(int i=;i<=m;++i){
int t=i%mod;
a[i]=(o*t*t+s*t+u)%mod;
}
while(N<=m)N<<=;N<<=;
qsum(n);printf("%d\n",c[m]);
return ;
}

bzoj4332[JSOI2012]分零食的更多相关文章

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

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

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

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

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

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

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

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

  5. bzoj4332;vijos1955:JSOI2012 分零食

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

  6. bzoj 4332:JSOI2012 分零食

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

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

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

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

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

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

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

随机推荐

  1. 北京Uber优步司机奖励政策(11月23日~11月29日)

    用户组:人民优步"关羽组"(适用于11月23日-11月29日)奖励政策: 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最 ...

  2. LeetCode:40. Combination Sum II(Medium)

    1. 原题链接 https://leetcode.com/problems/combination-sum-ii/description/ 2. 题目要求 给定一个整型数组candidates[ ]和 ...

  3. 「日常训练」Watering Flowers(Codeforces Round #340 Div.2 C)

    题意与分析 (CodeForces 617C) 题意是这样的:一个花圃中有若干花和两个喷泉,你可以调节水的压力使得两个喷泉各自分别以\(r_1\)和\(r_2\)为最远距离向外喷水.你需要调整\(r_ ...

  4. OSG-OSG中的observer_ptr指针

    看array大神的CookBook后一些感想,在代码上添加了一些注释,也对源码做了一些研读,记录下学习的过程. CookBook中第一个例子就是observer_ptr指针,这个指针和它的名字一样,就 ...

  5. git基础(2)

    三.查看提交历史日志查看·提交历史:git log 命令一个常用的选项是 -p,用来显示每次提交的内容差异. 你也可以加上 -2 来仅显示最近两次提交如果你想看到每次提交的简略的统计信息,你可以使用 ...

  6. 微信小程序之注释出现的问题(.json不能注释)

    js的注释一般是双斜杠// 或者是/**/这样的快注释 .json是配置文件,其内容必须符合json格式内部不允许有注释. JSON有两种数据结构: 名称/值对的集合:key : value样式: 值 ...

  7. 【springmvc+mybatis项目实战】杰信商贸-4.maven依赖+PO对+映射文件

    上一篇我们附件的增删改查功能全部完成.但是我们的附件有一个字段叫做“类型”(ctype),这里我们要使用数据字典,所以对于这一块我们要进行修改. 首先介绍一下数据字典 数据字典它是一个通用结构,跟业务 ...

  8. chrome编辑器与截图

    在地址栏中输入 data:text/html,<html contenteditable>即可使用编辑功能,打开控制台,ctrl + shift + p 调用命令面板,输入 capture ...

  9. MR execution in YARN

    Overview YARN provides API not for application developers but for the great developers working on ne ...

  10. Python3 Tkinter-Canvas

    1.创建 from tkinter import * root=Tk() cv=Canvas(root,bg='black') cv.pack() root.mainloop() 2.创建item f ...