题意:给你N个数字,每次利用这N个数字中最多两个数字进行加法运算,来得到目标中的M个数字。

Solution:

我们先来看看多项式乘法:\(A(x)=\sum_{i=0}^{n-1}a_ix^i\),\(B(x)=\sum_{i=0}^{n-1}b_ix^i\),\(C(x)=A(x)B(x)\)

\[c_k=\sum_{i+j=k,0\le i,j\le n}a_ib_jx^k
\]

有没有发现什么?我们可以将a复制一份为b,对于x,如果x在a里出现了,则令\(a_x=b_x=1\),特别的,令\(a_0=b_0=1\)

然后再将a,b两个多项式相乘,则对于一个数x,若\(c_x\)有值,则x可以被两个数组成,否则不行

Code:

#include<bits/stdc++.h>
#define ll long long
#define Pi acos(-1.0)
using namespace std;
const int N=200001*4;
int n,m,ans,len=1,tim,rtt[N],c[N];
struct cp{double x,y;}aa[N],bb[N];
cp operator + (cp a,cp b){return (cp){a.x+b.x,a.y+b.y};}
cp operator - (cp a,cp b){return (cp){a.x-b.x,a.y-b.y};}
cp operator * (cp a,cp b){return (cp){a.x*b.x-a.y*b.y,a.y*b.x+a.x*b.y};}
void FFT(cp *a,int flag){
for(int i=0;i<len;i++)
if(i<rtt[i]) swap(a[i],a[rtt[i]]);
for(int l=2;l<=len;l<<=1){
cp wn=(cp){cos(flag*2*Pi/l),sin(flag*2*Pi/l)};
for(int st=0;st<len;st+=l){
cp w=(cp){1,0};
for(int u=st;u<st+(l>>1);u++,w=w*wn){
cp x=a[u],y=w*a[u+(l>>1)];
a[u]=x+y,a[u+(l>>1)]=x-y;
}
}
}
}
int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
int main(){
int maxx=0;
n=read();aa[0].x=bb[0].x=1;
for(int i=1;i<=n;i++){
int x=read();
aa[x].x=1,bb[x].x=1;
maxx=max(maxx,x);
}
m=read();++maxx;
for(int i=1;i<=m;i++) c[i]=read();
while(len<=(maxx<<1)) len<<=1,++tim;
for(int i=0;i<len;i++)
rtt[i]=(rtt[i>>1]>>1)|((i&1)<<(tim-1));
FFT(aa,1);FFT(bb,1);
for(int i=0;i<len;i++) aa[i]=aa[i]*bb[i];
FFT(aa,-1);for(int i=0;i<len;i++) aa[i].x/=len;
for(int i=1;i<=m;i++)
if((int){aa[c[i]].x+0.5}) ans++;
printf("%d\n",ans);
return 0;
}

最新文章

  1. JAVA WEB项目中各种路径的获取
  2. Samba服务配置简明笔记
  3. 【caffe】无法找到gpu/mxGPUArray.h: No such file or directory
  4. SQLite页缓冲区管理
  5. Lync2010升级到2013之账户启用!
  6. 第1章 游戏之乐——NIM(2)“拈”游戏分析
  7. 有关&lt;action android:name=&quot;android.intent.action.DELETE&quot; /&gt;
  8. Golang--计算文件的MD5值
  9. CSS3秘笈复习:第七章
  10. C#的显式接口和隐式接口(转载)
  11. day_1_登录接口
  12. Solr 11 - Solr集群模式的部署(基于Solr 4.10.4搭建SolrCloud)
  13. Developing Vert.x Modules using the Standard Project
  14. 包含 PHP和nginx的镜像 supervisord.conf Dockerfile 案例
  15. L291
  16. Gson解析复杂JSON字符串的两种方式
  17. 7.2 TCP IP的11种状态
  18. Datawhale MySQL 训练营 Task3 表操作
  19. grunt 不是内部或外部命令,也不是可运行的程序或批处理文件
  20. 不好意思啊,我上周到今天不到10天时间,用纯C语言写了一个小站!想拍砖的就赶紧拿出来拍啊

热门文章

  1. debian jessie 网络设置
  2. 【实战】verilog中`define的使用记录
  3. OWASP移动安全漏洞Top 10
  4. WPF LinkButton
  5. # 20155319 Exp3 免杀原理与实践
  6. python基础学习1-变量定义赋值,屏幕输入输出
  7. 配置LNPM
  8. numpy 初识(二)
  9. Salesforce随笔: 将Visualforce Page渲染为PDF文件(Render a Visualforce Page as a PDF File)
  10. Dictionary 对象