题意:n个数,任取三个加起来,问每个可能的结果的方案数。

题解:构造母函数ABC,比如现在有 1 2 3 三个数。则

其中B表示同一个数加两次,C表示用三次。然后考虑去重。

A^3表示可重复地拿三个。(无顺序)

然后我们去掉拿了两个相同的方案A*B,由于有三种顺序(xxy,xyx,yxx) 所以*3

最后再加上多减了的 拿三个相同的的方案C,一共减了三次,多减了两次所以*2

最后除以3*2*1去掉顺序

然后fft即可

坑:数据有负数,所以读入需要+2e4预处理trk,最后减去6e4,因为每一项都是三次方,显然这样可以得到正确结果

#include <cstdio>
#include <cmath>
#include <complex>
#include <algorithm>
#include <iostream>
using namespace std;
typedef std::complex<double> complex_t;
const int badass=6e4;
const int MaxL = , MaxN = << MaxL;
typedef complex<double> complex_t;
complex_t A[MaxN], B[MaxN], C[MaxN];
complex_t eps[MaxN], inv_eps[MaxN];
void init_eps(int p)
{
double pi = acos(-);
//double angle = 2.0 * pi / p;
for (int i = ; i != p; ++i)
eps[i] = complex_t(cos(2.0 * pi * i / p), sin(2.0 * pi * i / p));
for (int i = ; i != p; ++i)
inv_eps[i] = conj(eps[i]);
} void transform(int n, complex_t *x, complex_t *w)
{
for (int i = , j = ; i != n; ++i)
{
if (i > j) std::swap(x[i], x[j]);
for (int l = n >> ; (j ^= l) < l; l >>= );
} for (int i = ; i <= n; i <<= )
{
int m = i >> ;
for (int j = ; j < n; j += i)
{
for (int k = ; k != m; ++k)
{
complex_t z = x[j + m + k] * w[n / i * k];
x[j + m + k] = x[j + k] - z;
x[j + k] += z;
}
}
}
} int main()
{ int n, max_v = ;
std::scanf("%d", &n);
for (int i = ; i != n; ++i)
{
int v;
std::scanf("%d", &v);v+=2e4;
A[v] += 1.0;
B[v * ] += 1.0;
C[v * ] += 1.0;
if (v * > max_v) max_v = v * ;
} int m = ;
while (m < max_v) m <<= ;//m<<=1;
init_eps(m);
transform(m, A, eps);
transform(m, B, eps);
for (int i = ; i != m; ++i)
A[i] = A[i] * A[i] * A[i] / 6.0 - A[i] *B[i] / 2.0 ;
transform(m, A, inv_eps);
for (int i = ; i != m; ++i)
A[i] = A[i] / double(m) + C[i] / 3.0;
for (int i = ; i != m; ++i)
{
int x = int(A[i].real() + 0.5);
if (x) std::printf("%d : %d\n", i-badass, x);
}
return ;
}
/*
5
-1
2
3
0
5
*/

最新文章

  1. Linux可插拔认证模块(PAM)的配置文件、工作原理与流程
  2. SQL 语句中union all和order by同时使用
  3. SAP (ABAP) 常用的数学函数
  4. Raspberry Pi 3 Model B 安装 OSMC
  5. C#入门篇6-6:字符串操作 StringBiulder string char[]之间的转化
  6. ff与ie 的关于js兼容性
  7. 复用TCP连接提升流媒体服务器之间流量转发效率
  8. python 打印文件里的内容
  9. FORM执行查询的各种方法
  10. Qt核心机制与原理
  11. Fiddler中session请求/响应类型与图标含义
  12. Codeforces Round #540 (Div. 3)--1118B - Tanya and Candies(easy TL!)
  13. Beta阶段敏捷冲刺①
  14. 获取的时候报cannot find package &quot;golang.org /x/net/context&quot;,编译也报错误
  15. 将jpg压缩成webp格式的图片
  16. 解题:BJOI 2006 狼抓兔子
  17. 认识我们的太阳系(Solar System)
  18. HCNP学习笔记之史上最全华为路由器交换机配置命令大合集
  19. 017PHP基础知识——流程控制语句(五)
  20. centos6 安装 docker

热门文章

  1. 9.12 翻译系列:数据注解特性之ConcurrencyCheck【EF 6 Code-First系列】
  2. Atitit mybatis快速开发 的sql api接口
  3. Json返回结果为null属性不显示解决方法
  4. Socket网络编程--聊天程序(9)
  5. [Big Data - Codis] Codis集群的搭建与使用
  6. vue中使用localstorage
  7. &lt;时间的玫瑰&gt;读书笔记
  8. .io域名在申请SSL证书时被坑
  9. Java知多少(93)鼠标事件
  10. RMAN正确地删除Archivelog以及设置有备库的归档删除策略