[NOIP2014普及组T1]珠心算测验 - NTT
2024-09-05 15:52:37
求数组有多少个数,恰好等于集合中另外两个(不同的)数之和?
注意到数集比较小,而且涉及到下标的加法,可以很自然地想到卷积
注意减去自己加自己的贡献
真是一道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 ;
}
// 这段时间代码风格有变化
最新文章
- CodeSimth-.NetFrameworkDataProvider可能没有安装。解决方法
- mysql - 其它
- Android自定义PopupWindow显示在控件上方或者下方
- Spring.Net.FrameworkV3.0 版本发布了,感谢大家的支持
- APACHE 多站点配置方法
- 使用JAP(基类)父类注解
- Js获取标签高度
- bzoj3672
- vim学习与理解
- MYSQL 查询缓存
- ";MySql.Data.MySqIClient.MySqlProviderSevices”违反了继承安全 性规则。派生类型必须与基类型的安全可访问性匹配或者比基类型的安 全可访问性低。 ";解决方法
- Python基于Flask框架配置依赖包信息的项目迁移部署小技巧
- 芝麻HTTP:TensorFlow LSTM MNIST分类
- java线程的学习
- JAVA接口里面的变量
- python manage.py runserver指定端口和ip
- windows下cmd无法使用telnet命令解决方法 (原)
- [转] 深入理解React 组件状态(State)
- Tempter of the Bone HDU - 1010
- 牛客网-《剑指offer》-变态跳台阶