题意很简单,就是求这个数。。。

其实场上我想出了分治fft的正解。。。然而不会打。。。然后打了个暴力fft挂了。。。

没啥好讲的,这题很恶心,卡常卡精度还爆int,要各种优化,有些dalao写的很复杂我都没看懂。。。我写的是每三位拆分然后再合并

代码:

 //强烈谴责卡常数而需要大量优化
//upd:还卡精度。。。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define inf 2147483647
#define eps 1e-9
using namespace std;
typedef long long ll;
const double pi=acos(-);
struct complex{
double a,b;
complex(double _a=,double _b=){
a=_a;
b=_b;
}
friend complex operator +(complex x,complex y){return complex(x.a+y.a,x.b+y.b);}
friend complex operator -(complex x,complex y){return complex(x.a-y.a,x.b-y.b);}
friend complex operator *(complex x,complex y){return complex(x.a*y.a-x.b*y.b,x.a*y.b+x.b*y.a);}
friend complex operator *(complex x,double y){return complex(x.a*y,x.b*y);}
friend complex operator /(complex x,double y){return complex(x.a/y,x.b/y);}
};
int n,tot=,bit,bitnum,rev[],tmp[],A[],B[],bs[],a[];
char out[];
void fft(complex *s,int op){
for(int i=;i<bit;i++)if(i<rev[i])swap(s[i],s[rev[i]]);
for(int i=;i<bit;i<<=){
complex w(cos(pi/i),op*sin(pi/i));
for(int p=i<<,j=;j<bit;j+=p){
complex wk(,);
for(int k=j;k<i+j;k++,wk=wk*w){
complex x=s[k],y=wk*s[k+i];
s[k]=x+y;
s[k+i]=x-y;
}
}
}
if(op==-){
for(int i=;i<=bit;i++){
s[i]=s[i]/(double)bit;
}
}
}
void mul(int a[],int b[],int c[],int n,int m){
static complex s1[],s2[];
for(bitnum=,bit=;bit<=m+n;bit<<=)bitnum++;
for(int i=;i<bit;i++){
rev[i]=(rev[i>>]>>)|((i&)<<(bitnum-));
}
for(int i=;i<n;i++)s1[i].a=a[i],s1[i].b=;
for(int i=;i<m;i++)s2[i].a=b[i],s2[i].b=;
for(int i=n;i<bit;i++)s1[i].a=s1[i].b=;
for(int i=m;i<bit;i++)s2[i].a=s2[i].b=;
fft(s1,);
fft(s2,);
for(int i=;i<bit;i++)s1[i]=s1[i]*s2[i];
fft(s1,-);
ll p=;
for(int i=;i<m+n||p;i++){
p+=(ll)(s1[i].a+0.5);
c[i]=p%;
p/=;
}
}
void add(int a[],int b[],int n){
int p=;
for(int i=;i<n||p;i++){
p+=a[i]+b[i];
a[i]=p%;
p/=;
}
}
void cdq(int l,int r,int A[],int B[]){
if(l==r){
A[]=bs[l]%;
A[]=bs[l]/%;
A[]=bs[l]/;
B[]=a[l]%;
B[]=a[l]/%;
B[]=a[l]/;
return;
}
int mid=(l+r)/,ll=(mid-l+)*,rr=(r-mid+)*;
cdq(l,mid,A,B);
cdq(mid+,r,A+ll,B+ll);
for(int i=;i<ll;i++)tmp[i]=B[i];
mul(A,B+ll,B,ll,rr);
add(B,tmp,ll);
mul(A,A+ll,A,ll,rr);
}
void delete_zero(char s[]){
int i,j;
tot--;
for(i=tot;i>=;i--){
if(s[i]!='')break;
}
s[i+]=;
j=i;
for(i=;i<j;i++,j--)swap(s[i],s[j]);
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&bs[i]);
}
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
cdq(,n,A,B);
//for(int i=0;i<=n<<1;i++)printf("%d ",B[i]);
for(int i=;i<=n<<;i++){
for(int j=;j<;j++){
out[tot++]=B[i]%+'';
B[i]/=;
}
}
//delete_zero(out);
int i,j;
tot--;
for(i=tot;i>=;i--){
if(out[i]!='')break;
}
out[i+]=;
j=i;
for(i=;i<j;i++,j--)swap(out[i],out[j]);
puts(out);
return ;
}

(2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT的更多相关文章

  1. 【XSY1529】小Q与进位制 分治 FFT

    题目大意 ​ 小Q发明了一种进位制,每一位的变化范围是\(0\)~\(b_i-1\),给你一个这种进位制下的整数\(a\),问你有多少非负整数小于\(a\).结果以十进制表示. ​ \(n\leq 1 ...

  2. (2016北京集训十)【xsy1528】azelso - 概率期望dp

    北京集训的题都是好题啊~~(于是我爆0了) 注意到一个重要的性质就是期望是线性的,也就是说每一段的期望步数可以直接加起来,那么dp求出每一段的期望就行了... 设$f_i$表示从$i$出发不回到$i$ ...

  3. (2016北京集训十)【xsy1530】小Q与内存

    一道很有意思的神题~ 暴力平衡树的复杂度很对(并不),但是$2^{30}$的空间一脸屎 这题的正解是一个类似线段树的数据结构,我觉得很有创新性Orz 首先可以想到一种暴力就是用一个点代表一个区间,然后 ...

  4. (2016北京集训十四)【xsy1556】股神小D - LCT

    题解: 题解居然是LCT……受教了 把所有区间按照端点排序,动态维护目前有重叠的区间,用LCT维护即可. 代码: #include<algorithm> #include<iostr ...

  5. 2016北京集训 小Q与进位制

    题目大意 一个数每一位进制不同,已知每一位的进制,求该数的十进制表达. 显然有 $$Ans=\sum\limits_{i=0}^{n-1}a_i \prod\limits_{j=0}^{i-1}bas ...

  6. (2016北京集训十四)【xsy1557】task

    题解: 限制可以看成图状结构,每个任务的对物品数量的影响可以看成权值,只不过这个权值用一个五元组来表示. 那么题意要求的就是最大权闭合子图,网络流经典应用. 代码: #include<algor ...

  7. (2016北京集训十二)【xsy1542】疯狂求导

    题解: 这题看起来很难...但是实际上并没有想象中的那么难 第一眼看上去不会求导公式怎么办?不要紧,题目背景非常良心的给出了题目中的导数计算公式 求完导合并同类项很恶心怎么办?不要紧,样例解释说明了不 ...

  8. 【2019北京集训测试赛(七)】 操作 分治+FFT+生成函数

    题目大意:你有$n$个操作和一个初始为$0$的变量$x$. 第$i$个操作为:以$P_i$的概率给$x$加上$A_i$,剩下$1-P_i$的概率给$x$乘上$B_i$. 你袭击生成了一个长度为$n$的 ...

  9. [2016北京集训测试赛5]小Q与内存-[线段树的神秘操作]

    Description Solution 哇真的异常服气..线段树都可以搞合并和拆分的啊orzorz.神的世界我不懂 Code #include<iostream> #include< ...

随机推荐

  1. OpenGL编程(八)3D数学与坐标变换

    笛卡尔坐标 一维坐标系 以一个点为原点,选定一个方向为正方向(相反的方向为反方向),以一定的距离为标尺建立一维坐标系.一维坐标系一般应用于描述在一维空间中的距离. 举个例子:一维坐标系好比一条拉直的电 ...

  2. Type system-Type checking

    类型系统的属性: 1.结构属性: 2.规则属性:类型系统定义了一套规则(内部数据的访问规则.函数的访问规则.类型的比较与转化规则),以供编译和运行时进行检查. In programming langu ...

  3. ZBrush中关于标记的特殊情况

    在ZBrush®中使用Marker标记调控板来记忆物体属性,因此能在任何时间回到标记并使用它给其他物体或改变物体作为参考点,在使用Marker标记调控板时回出现很多特殊情况,本文小编就这些特殊情况做一 ...

  4. WordCount合作--自己部分

    前言: (1)合作者:201631062127,201631062625 (2)合作代码地址:WordCount 一.结对的PSP表格: PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟 ...

  5. UGUI图集管理

    using UnityEngine; using System.Collections; using System.Collections.Generic; //纹理图集加载管理 public cla ...

  6. HTTP请求和响应模式(B/S)(2)

    B/S          及浏览器/客服端模式 根据发送的状态码不同,显示response的状态不同

  7. ASP.NET-ActionResutlt

    @RenderPage("Page_part1"); 上面的这种写法是错误的应该是 @RenderPage("Page_part1.cshtml"); // 要 ...

  8. skimage的安装,scikit-image

    在mac上面的安装: pip install -U scikit-image

  9. Spring Cloud Feign 出现ClassNotFoundException: feign.Feign$Builder错误

    Spring Cloud Feign 出现ClassNotFoundException: feign.Feign$Builder错误 后来发现是POM文件写错了,修改为正确的pom,就可以了: POM ...

  10. Linux多线程实践(四 )线程的特定数据

    在单线程程序中.我们常常要用到"全局变量"以实现多个函数间共享数据, 然而在多线程环境下.因为数据空间是共享的.因此全局变量也为全部线程所共同拥有.但有时应用程序设计中有必要提供线 ...