直接暴力卷积+统计就可以了。

去重比较复杂。

其实也不复杂,抄吧!

反正AC了。

#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define mp make_pair #define maxn 400005 const double pi=acos(-1.0); struct Complex{
double x,y;
Complex(){}
Complex(double _x,double _y){x=_x;y=_y;}
Complex operator + (Complex a) {return Complex(x+a.x,y+a.y);}
Complex operator - (Complex a) {return Complex(x-a.x,y-a.y);}
Complex operator * (Complex a) {return Complex(x*a.x-y*a.y,x*a.y+y*a.x);}
}x[maxn],y[maxn],z[maxn],ans3[maxn],ans2[maxn],c[maxn],ans1[maxn],ans[maxn]; int n,a[maxn],mx=0,m=1,len,rev[maxn]; void FFT(Complex * x,int n,int flag)
{
F(i,0,n-1) if (rev[i]>i) swap(x[i],x[rev[i]]);
for (int m=2;m<=n;m<<=1)
{
Complex wn=Complex(cos(2*pi/m),flag*sin(2*pi/m));
for (int i=0;i<n;i+=m)
{
Complex w=Complex(1.0,0);
for (int j=0;j<(m>>1);++j)
{
Complex u=x[i+j],v=x[i+j+(m>>1)]*w;
x[i+j]=u+v; x[i+j+(m>>1)]=u-v;
w=w*wn;
}
}
}
} int main()
{
scanf("%d",&n);
F(i,1,n)
{
scanf("%d",&a[i]);
x[a[i]].x+=1;
y[a[i]*2].x+=1;
z[a[i]*3].x+=1;
mx=max(mx,a[i]);
}
n=mx*3+5;while (m<=n) m<<=1,len++; n=m;
F(i,0,n-1)
{
int ret=0,t=i;
F(j,1,len) ret<<=1,ret|=t&1,t>>=1;
rev[i]=ret;
}
FFT(x,n,1); FFT(y,n,1); FFT(z,n,1);
F(i,0,n-1) c[i]=x[i]*x[i]*x[i];
FFT(c,n,-1); F(i,0,n-1) ans3[i].x+=c[i].x/n;
F(i,0,n-1) c[i]=x[i]*y[i];
FFT(c,n,-1); F(i,0,n-1) ans3[i].x-=3*c[i].x/n;
F(i,0,n-1) c[i]=z[i];
FFT(c,n,-1); F(i,0,n-1) ans3[i].x+=2*c[i].x/n;
F(i,0,n-1) ans3[i].x=(ans3[i].x+0.3)/6; F(i,0,n-1) c[i]=x[i]*x[i];
FFT(c,n,-1); F(i,0,n-1) ans2[i].x+=c[i].x/n;
F(i,0,n-1) c[i]=y[i];
FFT(c,n,-1); F(i,0,n-1) ans2[i].x-=c[i].x/n;
F(i,0,n-1) ans2[i].x=(ans2[i].x+0.3)/2; F(i,0,n-1) c[i]=x[i];
FFT(c,n,-1); F(i,0,n-1) ans1[i].x+=c[i].x/n; F(i,0,n-1) ans[i].x=ans2[i].x+ans3[i].x+ans1[i].x;
F(i,0,n-1) if ((int)ans[i].x>0) printf("%d %d\n",i,(int)ans[i].x); }

  

最新文章

  1. 项目自动化建构工具gradle 入门4——javaWeb在浏览器中显示helloWorld
  2. python学习笔记-(十三)线程&amp;多线程
  3. relocation 错误
  4. iOS下控件坐标的转换方法
  5. PHP 实现页面静态化
  6. sqlserver取得本月一号
  7. APP安全测评checklist
  8. php 获取汉字拼音首字母的函数
  9. ALV调用的几个标准函数
  10. 5、范围标签&lt;fieldset&gt;&lt;/fieldset&gt;
  11. Java读写Excel之POI超入门
  12. WPS或xls 数据分列 清洗
  13. 在 CentOS 7上Virtualbox+phpVirtualBox完整虚拟化环境部署
  14. 使用Hexo+Github搭建属于自己的博客(基础)
  15. python oracle 查询返回字典
  16. iptables-25个常用用法【转】
  17. bzoj3944: Sum 杜教筛板子题
  18. Android下打印堆栈的两种方法
  19. Spring框架的事务管理之声明式事务管理的类型
  20. PHPCMS如何让手机站点取消浏览大图直接加载原图

热门文章

  1. Portal的认证方式
  2. 列表与特殊字符,div(新手HTMLL基础)
  3. java Html&amp;JavaScript面试题:HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交?
  4. eclipse 导出Runnable JAR file ,双击无法执行原因与解决 双击后闪退的原因 批处理java打包文件 @echo off start javaw -jar *.jar
  5. Java传值分析
  6. 转载:jsonp详解
  7. SpringMVC URL模板模式映射
  8. linux 编辑文档
  9. Linux 系统中 sudo 命令的 10 个技巧
  10. 使用shell脚本添加用户