Description

给定n,b,c,d,e以及A0,A1,···,An−1,定义
xk=b×c^4k+d×c^2k+e
f(x)=Sigma(Aix^i),0<=i<=n-1
请你求出f(x0),f(x1),···,f(xn−1)对10^6+3取模的值。

Input

第一行包括五个整数n,b,c,d,e。
接下来一行包括n个整数,代表a0,a1,···,an−1
N<=60000,保证给出的数字都为整数且均在 [0, 10^6]

Output

N行,第i行代表f(xi−1)
多项式多点求值可过,但似乎不是正解
#include<bits/stdc++.h>
typedef std::vector<int> pol;
typedef long long i64;
typedef unsigned long long u64;
const int P=;
int max(int a,int b){return a>b?a:b;}
template<int p>
i64 pw(int a,int n){
if(n<)n+=p-;
i64 v=;
for(;n;n>>=,a=i64(a)*a%p)if(n&)v=v*a%p;
return v;
}
int N,K,r[<<|];
typedef double ld;
struct cplx{
ld a,b;
cplx(ld _x=,ld _y=):a(_x),b(_y){}
cplx operator+(cplx w){return cplx(a+w.a,b+w.b);}
cplx operator-(cplx w){return cplx(a-w.a,b-w.b);}
cplx operator*(cplx w){return cplx(a*w.a-b*w.b,a*w.b+b*w.a);}
}A[<<|],B[<<|],*Es[][],C[<<|],D[<<|];
void pre(int n){
for(N=,K=;N<n;N<<=,++K);
for(int i=;i<N;++i)r[i]=r[i>>]>>|(i&)<<K;
memset(A,,sizeof(cplx)*N);
memset(B,,sizeof(cplx)*N);
memset(C,,sizeof(cplx)*N);
memset(D,,sizeof(cplx)*N);
}
const ld pi=acos(-);
void dft(cplx*a,int t){
for(int i=;i<N;++i)if(i<r[i])std::swap(a[i],a[r[i]]);
for(int i=,z=;i<N;i<<=,++z){
if(!Es[t==][z]){
cplx*E=Es[t==][z]=new cplx[i];
for(int j=;j<i;++j)E[j]=cplx(cos(j*pi/i),t*sin(j*pi/i));
}
cplx*E=Es[t==][z];
for(int j=;j<N;j+=i<<){
cplx*b=a+j,*c=b+i;
for(int k=;k<i;++k){
cplx x=b[k],y=c[k]*E[k];
b[k]=x+y;
c[k]=x-y;
}
}
}
if(t==-)for(int i=;i<N;++i)a[i].a/=N;
}
void mul(cplx*a,cplx*b){
for(int i=;i<N;++i)a[i]=a[i]*b[i];
}
void mov(const pol&x,cplx*a){
for(int i=;i<x.size();++i)a[i].a=x[i];
}
void mov(cplx*a,const pol&_x){
pol&x=const_cast<pol&>(_x);
for(int i=;i<x.size();++i)x[i]=i64(a[i].a+0.49)%P;
}
void mov(const pol&x,int*a){
memcpy(a,x.data(),x.size()*sizeof(int));
}
void mov(int*a,const pol&_x){
pol&x=const_cast<pol&>(_x);
memcpy(x.data(),a,x.size()*sizeof(int));
}
void chk(pol&w){
int p=w.size();
while(p&&!w[p-])--p;
w.resize(p);
}
void rev(pol&w){
std::reverse(w.data(),w.data()+w.size());
}
u64 _c[];
pol operator*(const pol&a,const pol&b){
pol c(a.size()+b.size()-);
if(c.size()<=){
const int*as=a.data(),ap=a.size(),*bs=b.data(),bp=b.size();
int*cs=c.data();
for(int i=;i<c.size();++i)_c[i]=;
for(int i=;i<ap;++i)for(int j=;j<bp;++j)_c[i+j]+=u64(as[i])*bs[j];
for(int i=;i<c.size();++i)cs[i]=_c[i]%P;
}else if(c.size()<=){
pre(c.size());
mov(a,A),mov(b,B);
dft(A,),dft(B,);
mul(A,B);
dft(A,-);
mov(A,c);
}else{
pre(c.size());
for(int i=;i<a.size();++i){
A[i]=a[i]>>;
B[i]=a[i]&;
}
for(int i=;i<b.size();++i){
C[i]=b[i]>>;
D[i]=b[i]&;
}
dft(A,);dft(B,);dft(C,);dft(D,);
for(int i=;i<N;++i){
cplx v1=A[i]*C[i];
cplx v2=A[i]*D[i]+B[i]*C[i];
cplx v3=B[i]*D[i];
A[i]=v1;
B[i]=v2;
C[i]=v3;
}
dft(A,-);dft(B,-);dft(C,-);
for(int i=;i<c.size();++i){
c[i]=((i64(A[i].a+0.49)<<)+(i64(B[i].a+0.49)<<)+i64(C[i].a+0.49))%P;
}
}
chk(c);
return c;
}
pol operator*(const pol&w,int x){
pol a(w);
for(int i=;i<a.size();++i)a[i]=i64(a[i])*x%P;
return a;
}
pol operator-(const pol&a,const pol&b){
pol c(max(a.size(),b.size()));
mov(a,c.data());
for(int i=;i<b.size();++i)c[i]=(c[i]-b[i]+P)%P;
chk(c);
return c;
}
pol inv(pol a){
if(a.size()==){
a.resize();
a[]=pw<P>(a[],P-);
return a;
}
pol b=inv(pol(a.data(),a.data()+(a.size()-)/+));
pol c=b*b*a;
c=b*-c;
c.resize(a.size());
return c;
}
pol operator/(pol a,pol b){
chk(a),chk(b);
rev(a),rev(b);
int sz=a.size()-b.size()+;
b.resize(sz);
pol c=a*inv(b);
c.resize(sz);
rev(c);
chk(c);
return c;
}
pol operator%(const pol&a,const pol&b){
if(a.size()<b.size())return a;
return a-a/b*b;
}
int cal(const pol&w,i64 x){
int y=;
for(int p=w.size()-;p>=;--p)y=(y*x+w[p])%P;
return y;
}
int n,b,c,d,e,a[],as[];
struct Q{int x,id;}qs[];
bool operator<(Q a,Q b){return a.x<b.x;}
pol tr[];
void calc0(int w,int L,int R){
if(L==R){
tr[w]=pol();
tr[w][]=;
tr[w][]=(P-qs[L].x)%P;
return;
}
int M=(L+R)/;
calc0(w<<,L,M);
calc0(w<<^,M+,R);
tr[w]=tr[w<<]*tr[w<<^];
}
void calc1(const pol&a,int w,int L,int R){
if(R-L<=){
for(int i=L;i<=R;++i)as[qs[i].id]=cal(a,qs[i].x);
return;
}
int M=(L+R)/;
calc1(a%tr[w<<],w<<,L,M);
calc1(a%tr[w<<^],w<<^,M+,R);
}
int main(){
scanf("%d%d%d%d%d",&n,&b,&c,&d,&e);
for(int i=;i<n;++i)scanf("%d",a+i);
for(int i=;i<n;++i){
qs[i].x=(b*pw<P>(c,*i)+d*pw<P>(c,*i)+e)%P;
qs[i].id=i;
}
std::sort(qs,qs+n);
tr[]=pol(n);
mov(a,tr[]);
calc0(,,n-);
calc1(tr[],,,n-);
for(int i=;i<n;++i)printf("%d\n",(as[i]+P)%P);
return ;
}

bzoj 4929: 第三题的更多相关文章

  1. shanquan2的两年三题系列

    好像只有2个月就退役啦 不管了,先说一下哪三题:多点求值.lcm.替罪羊树(bzoj3065) [upd0]2016.3.29 多点求值A掉啦,myy卡常数sxbk(不是说好的是shanquan2出的 ...

  2. Java-集合-第三题 有如下Student 对象, private String name; private int age; private int score; private String classNum; 其中,classNum 表示学生的班号,例如“class05”。 有如下List List list = new ArrayList(); l

    第三题 有如下Student 对象, private String name; private int age; private int score; private String classNum; ...

  3. NOIP 2008提高组第三题题解by rLq

    啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...

  4. NOIP2008提高组(前三题) -SilverN

    此处为前三题,第四题将单独发布 火柴棒等式 题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0 ...

  5. 《学习OpenCV》练习题第四章第三题b

    #include <highgui.h> #include <cv.h> #include "opencv_libs.h" /* *<学习OpenCV ...

  6. 《学习OpenCV》练习题第四章第三题a

    #include <highgui.h> #include <cv.h> #include "opencv_libs.h" #pragma comment ...

  7. 阿里聚安全攻防挑战赛第三题Android PwnMe解题思路

    阿里聚安全攻防挑战赛第三题Android PwnMe解题思路 大家在聚安全挑战赛正式赛第三题中,遇到android app 远程控制的题目.我们今天带你一探究竟,如何攻破这道题目. 一.题目 购物应用 ...

  8. 剑指offier第三题

    package 剑指office; /* * 第三题二维数组查找 * 在一个二维数组中,每一行都按照从左到右递增的顺序排序, * 每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维 ...

  9. NOIP2005-普及组复赛-第三题-采药

    题目描述 Description 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山 ...

随机推荐

  1. MyEclipse移动开发教程:设置所需配置的iOS应用(四)

    MyEclipse个人授权 折扣低至冰点!立即开抢>> [MyEclipse最新版下载] 三.创建配置文件 Provisioning profiles授权文件应用程序在iOS设备上安装并运 ...

  2. Excel根据人名匹配得到编号

    操作步骤:输入公式 =IF(COUNTIF($E$2:$E2,$E2)>COUNTIF($B:$B,$E2),"",INDEX(C:C,SMALL(IF($B$1:$B$10 ...

  3. js创建表单并提交

    1.脚本 Util = { post : function(URL, PARAMS){ //虚拟表单实现post提交 var temp = document.createElement("f ...

  4. spring事务管理及相关知识

    最近在项目中遇到了spring事务的注解及相关知识,突然间感觉自己对于这部分知识只停留在表面的理解层次上,于是乎花些时间上网搜索了一些文章,以及对于源码的解读,整理如下: 一.既然谈到事务,那就先搞清 ...

  5. PostgreSQL误删操作怎么处理

    方式一: PostgreSQL中没有Oracle的闪回机制,只有更加复杂的PITR恢复机制,这要求数据库有全量备份和增量备份,否则无法进行回滚. 方式二: 虽然PostgreSQL有延迟复制的技术,在 ...

  6. Vue.js更改调试地址端口号

    Vue项目一般使用自带的脚手架工具vue-cli和webpack打包方式进行项目构建运行.开发中,我们在控制台输入命令行npm run dev部署项目后,默认开启的页面调试地址是8080端口.但是有时 ...

  7. SSH项目搭建(五)——web.xml文件配置

    上一章写到pom.xml有一个报错,说找不到web.xml文件.确实是这样的,因为我们用maven搭建的web层里就是没有这个文件.我们能看到,webapp文件夹里是空的. 没有,就想办法把它弄出来. ...

  8. magento开发中文手册

    Magento开发 第一章 手册简介Introduction 对一个开发人员来说,电子商务开发也许是现今最具创造性的工作.在这个瞬息万变的网络世界,为了保持始终领先竞争对手一步,无论是对你自己还是你的 ...

  9. Linux配置python和pip环境

    CentOS: 1.首先安装EPEL扩展源: yum install -y epel-release 2.系统自带python2,所以只需安装python3 yum install -y python ...

  10. (4)socket的基础使用(基于TCP协议的并发编程)

    需要实现并发需要依靠socketserver 模块 socketserver模块下有几个功能 def __init__(self, request, client_address, server): ...