求数组有多少个数,恰好等于集合中另外两个(不同的)数之和?

注意到数集比较小,而且涉及到下标的加法,可以很自然地想到卷积

注意减去自己加自己的贡献

真是一道NTT练手好题

 #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define Dollar1 998244353
#define MAXN 70001
#define int long long
int lim, dig, rev[MAXN], n, sums[MAXN], A[MAXN];
const int G = , Ginv = (Dollar1 + ) / ;
void init(int sz) {
lim = ; dig = ;
while (lim <= sz << ) lim <<= , ++dig;
for (int i = ; i != lim; ++i)
rev[i] = (rev[i >> ] >> ) | ((i & ) << (dig - ));
}
inline int fastpow(int a, int b) {
int res = ;
while (b) {
if (b & ) res = res * a % Dollar1;
a = a * a % Dollar1;
b >>= ;
}
return res;
}
void NTT(int * A, int type) {
for (int i = ; i != lim; ++i)
if (i < rev[i])
swap(A[i], A[rev[i]]);
for (int mid = ; mid < lim; mid <<= ) {
int Wn = fastpow(type == ? G : Ginv, (Dollar1 + ) / mid / );
for (int k = ; k < lim; k += (mid << )) {
int W = ;
for (int l = ; l < mid; ++l, W = W * Wn % Dollar1) {
int X = A[l + k], Y = A[l + k + mid] * W % Dollar1;
A[l + k] = (X + Y) % Dollar1;
A[l + k + mid] = (X - Y + Dollar1) % Dollar1;
}
}
}
if (type == -) {
const int liminv = fastpow(lim, Dollar1 - );
for (int i = ; i != lim; ++i)
A[i] = A[i] * liminv % Dollar1;
}
}
signed main() {
cin >> n;
init();
for (int i = ; i <= n; ++i) cin >> sums[i], A[sums[i]] = ;
NTT(A, );
for (int i = ; i != lim; ++i) (A[i] *= A[i]) %= Dollar1;
NTT(A, -);
for (int i = ; i <= n; ++i) --A[sums[i] << ];
int ans = ;
for (int i = ; i <= n; ++i) ans += (bool)A[sums[i]];
cout << ans << endl;
return ;
}

// 这段时间代码风格有变化

最新文章

  1. CodeSimth-.NetFrameworkDataProvider可能没有安装。解决方法
  2. mysql - 其它
  3. Android自定义PopupWindow显示在控件上方或者下方
  4. Spring.Net.FrameworkV3.0 版本发布了,感谢大家的支持
  5. APACHE 多站点配置方法
  6. 使用JAP(基类)父类注解
  7. Js获取标签高度
  8. bzoj3672
  9. vim学习与理解
  10. MYSQL 查询缓存
  11. &quot;MySql.Data.MySqIClient.MySqlProviderSevices”违反了继承安全 性规则。派生类型必须与基类型的安全可访问性匹配或者比基类型的安 全可访问性低。 &quot;解决方法
  12. Python基于Flask框架配置依赖包信息的项目迁移部署小技巧
  13. 芝麻HTTP:TensorFlow LSTM MNIST分类
  14. java线程的学习
  15. JAVA接口里面的变量
  16. python manage.py runserver指定端口和ip
  17. windows下cmd无法使用telnet命令解决方法 (原)
  18. [转] 深入理解React 组件状态(State)
  19. Tempter of the Bone HDU - 1010
  20. 牛客网-《剑指offer》-变态跳台阶

热门文章

  1. Luogu P2569 [SCOI2010] 股票交易
  2. 用Python快速找到出现次数最多的数据
  3. golang中格式化符号说明
  4. PanDownload/AD16/MDK5/CAD2019及2007/Dev-C++/Office2016专业版软件安装包
  5. redis加入systemctl服务
  6. jquery做的滑动按钮开关
  7. Windows Electron初探
  8. python、第六篇:视图、触发器、事务、存储过程、函数
  9. pamamiko的学习笔记
  10. 从0开始Jmeter接口测试实战