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)
多项式多点求值可过,但似乎不是正解
  1. #include<bits/stdc++.h>
  2. typedef std::vector<int> pol;
  3. typedef long long i64;
  4. typedef unsigned long long u64;
  5. const int P=;
  6. int max(int a,int b){return a>b?a:b;}
  7. template<int p>
  8. i64 pw(int a,int n){
  9. if(n<)n+=p-;
  10. i64 v=;
  11. for(;n;n>>=,a=i64(a)*a%p)if(n&)v=v*a%p;
  12. return v;
  13. }
  14. int N,K,r[<<|];
  15. typedef double ld;
  16. struct cplx{
  17. ld a,b;
  18. cplx(ld _x=,ld _y=):a(_x),b(_y){}
  19. cplx operator+(cplx w){return cplx(a+w.a,b+w.b);}
  20. cplx operator-(cplx w){return cplx(a-w.a,b-w.b);}
  21. cplx operator*(cplx w){return cplx(a*w.a-b*w.b,a*w.b+b*w.a);}
  22. }A[<<|],B[<<|],*Es[][],C[<<|],D[<<|];
  23. void pre(int n){
  24. for(N=,K=;N<n;N<<=,++K);
  25. for(int i=;i<N;++i)r[i]=r[i>>]>>|(i&)<<K;
  26. memset(A,,sizeof(cplx)*N);
  27. memset(B,,sizeof(cplx)*N);
  28. memset(C,,sizeof(cplx)*N);
  29. memset(D,,sizeof(cplx)*N);
  30. }
  31. const ld pi=acos(-);
  32. void dft(cplx*a,int t){
  33. for(int i=;i<N;++i)if(i<r[i])std::swap(a[i],a[r[i]]);
  34. for(int i=,z=;i<N;i<<=,++z){
  35. if(!Es[t==][z]){
  36. cplx*E=Es[t==][z]=new cplx[i];
  37. for(int j=;j<i;++j)E[j]=cplx(cos(j*pi/i),t*sin(j*pi/i));
  38. }
  39. cplx*E=Es[t==][z];
  40. for(int j=;j<N;j+=i<<){
  41. cplx*b=a+j,*c=b+i;
  42. for(int k=;k<i;++k){
  43. cplx x=b[k],y=c[k]*E[k];
  44. b[k]=x+y;
  45. c[k]=x-y;
  46. }
  47. }
  48. }
  49. if(t==-)for(int i=;i<N;++i)a[i].a/=N;
  50. }
  51. void mul(cplx*a,cplx*b){
  52. for(int i=;i<N;++i)a[i]=a[i]*b[i];
  53. }
  54. void mov(const pol&x,cplx*a){
  55. for(int i=;i<x.size();++i)a[i].a=x[i];
  56. }
  57. void mov(cplx*a,const pol&_x){
  58. pol&x=const_cast<pol&>(_x);
  59. for(int i=;i<x.size();++i)x[i]=i64(a[i].a+0.49)%P;
  60. }
  61. void mov(const pol&x,int*a){
  62. memcpy(a,x.data(),x.size()*sizeof(int));
  63. }
  64. void mov(int*a,const pol&_x){
  65. pol&x=const_cast<pol&>(_x);
  66. memcpy(x.data(),a,x.size()*sizeof(int));
  67. }
  68. void chk(pol&w){
  69. int p=w.size();
  70. while(p&&!w[p-])--p;
  71. w.resize(p);
  72. }
  73. void rev(pol&w){
  74. std::reverse(w.data(),w.data()+w.size());
  75. }
  76. u64 _c[];
  77. pol operator*(const pol&a,const pol&b){
  78. pol c(a.size()+b.size()-);
  79. if(c.size()<=){
  80. const int*as=a.data(),ap=a.size(),*bs=b.data(),bp=b.size();
  81. int*cs=c.data();
  82. for(int i=;i<c.size();++i)_c[i]=;
  83. for(int i=;i<ap;++i)for(int j=;j<bp;++j)_c[i+j]+=u64(as[i])*bs[j];
  84. for(int i=;i<c.size();++i)cs[i]=_c[i]%P;
  85. }else if(c.size()<=){
  86. pre(c.size());
  87. mov(a,A),mov(b,B);
  88. dft(A,),dft(B,);
  89. mul(A,B);
  90. dft(A,-);
  91. mov(A,c);
  92. }else{
  93. pre(c.size());
  94. for(int i=;i<a.size();++i){
  95. A[i]=a[i]>>;
  96. B[i]=a[i]&;
  97. }
  98. for(int i=;i<b.size();++i){
  99. C[i]=b[i]>>;
  100. D[i]=b[i]&;
  101. }
  102. dft(A,);dft(B,);dft(C,);dft(D,);
  103. for(int i=;i<N;++i){
  104. cplx v1=A[i]*C[i];
  105. cplx v2=A[i]*D[i]+B[i]*C[i];
  106. cplx v3=B[i]*D[i];
  107. A[i]=v1;
  108. B[i]=v2;
  109. C[i]=v3;
  110. }
  111. dft(A,-);dft(B,-);dft(C,-);
  112. for(int i=;i<c.size();++i){
  113. c[i]=((i64(A[i].a+0.49)<<)+(i64(B[i].a+0.49)<<)+i64(C[i].a+0.49))%P;
  114. }
  115. }
  116. chk(c);
  117. return c;
  118. }
  119. pol operator*(const pol&w,int x){
  120. pol a(w);
  121. for(int i=;i<a.size();++i)a[i]=i64(a[i])*x%P;
  122. return a;
  123. }
  124. pol operator-(const pol&a,const pol&b){
  125. pol c(max(a.size(),b.size()));
  126. mov(a,c.data());
  127. for(int i=;i<b.size();++i)c[i]=(c[i]-b[i]+P)%P;
  128. chk(c);
  129. return c;
  130. }
  131. pol inv(pol a){
  132. if(a.size()==){
  133. a.resize();
  134. a[]=pw<P>(a[],P-);
  135. return a;
  136. }
  137. pol b=inv(pol(a.data(),a.data()+(a.size()-)/+));
  138. pol c=b*b*a;
  139. c=b*-c;
  140. c.resize(a.size());
  141. return c;
  142. }
  143. pol operator/(pol a,pol b){
  144. chk(a),chk(b);
  145. rev(a),rev(b);
  146. int sz=a.size()-b.size()+;
  147. b.resize(sz);
  148. pol c=a*inv(b);
  149. c.resize(sz);
  150. rev(c);
  151. chk(c);
  152. return c;
  153. }
  154. pol operator%(const pol&a,const pol&b){
  155. if(a.size()<b.size())return a;
  156. return a-a/b*b;
  157. }
  158. int cal(const pol&w,i64 x){
  159. int y=;
  160. for(int p=w.size()-;p>=;--p)y=(y*x+w[p])%P;
  161. return y;
  162. }
  163. int n,b,c,d,e,a[],as[];
  164. struct Q{int x,id;}qs[];
  165. bool operator<(Q a,Q b){return a.x<b.x;}
  166. pol tr[];
  167. void calc0(int w,int L,int R){
  168. if(L==R){
  169. tr[w]=pol();
  170. tr[w][]=;
  171. tr[w][]=(P-qs[L].x)%P;
  172. return;
  173. }
  174. int M=(L+R)/;
  175. calc0(w<<,L,M);
  176. calc0(w<<^,M+,R);
  177. tr[w]=tr[w<<]*tr[w<<^];
  178. }
  179. void calc1(const pol&a,int w,int L,int R){
  180. if(R-L<=){
  181. for(int i=L;i<=R;++i)as[qs[i].id]=cal(a,qs[i].x);
  182. return;
  183. }
  184. int M=(L+R)/;
  185. calc1(a%tr[w<<],w<<,L,M);
  186. calc1(a%tr[w<<^],w<<^,M+,R);
  187. }
  188. int main(){
  189. scanf("%d%d%d%d%d",&n,&b,&c,&d,&e);
  190. for(int i=;i<n;++i)scanf("%d",a+i);
  191. for(int i=;i<n;++i){
  192. qs[i].x=(b*pw<P>(c,*i)+d*pw<P>(c,*i)+e)%P;
  193. qs[i].id=i;
  194. }
  195. std::sort(qs,qs+n);
  196. tr[]=pol(n);
  197. mov(a,tr[]);
  198. calc0(,,n-);
  199. calc1(tr[],,,n-);
  200. for(int i=;i<n;++i)printf("%d\n",(as[i]+P)%P);
  201. return ;
  202. }

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. oracle_sql语句的大全

    # 建立数据库struts   CREATE DATABASE IF NOT EXISTS struts DEFAULT CHARACTER SET GBK; 1.登录:(管理员)conn sys/p ...

  2. pyqt(二) 创建第一个程序(helloworld)解决object has no attribute 'setCentralWidget'

    1.运行Qt Creator QtCreator主界面分为了6个模式:欢迎模式.编辑模式.设计模式.Debug调试模式.项目模式和帮助模式,分别由左侧的6个图标进行切换,对应的快捷键是Ctrl + 数 ...

  3. Flask初级(五)flash在模板中使用继承,模板的模板

    Project name :Flask_Plan templates:templates static:static 继续上一篇文章. 我们不希望每个页面都写一遍引入js,css,导航条……………… ...

  4. html form method 属性不支持put,delete请求方式,以及开启spring mvc的rest的方式

    1.加上隐藏域解决form method 不支持put,delete的请求方式的问题 2.配置spring mvc HiddenHttpMethodFilter过滤器实现对put和delete请求方式 ...

  5. SharePoint 数据库管理-PowerShell

    1. 显示所有SharePoint数据库 Get-SPDatabase –ServerInstance "SP2010\SQLSharePoint" 2. 获取指定的数据库 $da ...

  6. pdo 操作

    $dbhost = 'localhost';$dbname = 'dcim';$dbuser = 'dcim';$dbpass = 'dcim'; $locale = "en_US" ...

  7. CCScrollView

    #ifndef TestCCScrollView_testScene_h #define TestCCScrollView_testScene_h #include "cocos2d.h&q ...

  8. python两个子线程通过queue通信

    SocketServer端代码 #!/usr/bin/env python import threading import SocketServer import time import queue ...

  9. python3:xlrd、xlwt、xlutils处理excel文件

    1.xlrd读取excel 请参考上篇博客https://www.cnblogs.com/shapeL/p/9075843.html 2.xlwt生成excel 安装下载:pip install xl ...

  10. 【转】WinForm基础

    winform基础 先修基础:C#语法基础和面向对象编程 1.Winform创建解决方案 2.Winform窗体 3.MessageBOx 4.Winform登录.控制软件只运行一次.回车登录 5.W ...