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

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

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

真是一道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 ;
}

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

[NOIP2014普及组T1]珠心算测验 - NTT的更多相关文章

  1. NOIP 普及组 2014 珠心算测验

    传送门 https://www.cnblogs.com/violet-acmer/p/9898636.html 题解: 枚举两两间出所有的可能加和,然后遍历一遍这 n 个数,找出满足条件的总个数. 这 ...

  2. 洛谷——P2141 珠心算测验

    P2141 珠心算测验 题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及. 某学校的珠心算老师 ...

  3. NOIP201401珠心算测验

    珠心算测验  问题描述]  珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及.  某学校的珠心算老师采用 ...

  4. 珠心算测验(0)<P2014_1>

    珠心算测验 (count.cpp/c/pas) 问题描述]  珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得 ...

  5. [NOIP2014] 普及组

    珠心算测验 模拟. 将所有“两个不同数之和”装进桶里,扫描原数组记录满足条件的数的个数. /*by SilverN*/ #include<iostream> #include<alg ...

  6. 【NOIP2014 普及组】螺旋矩阵

    [NOIP2014 普及组]螺旋矩阵 一.题目 [NOIP2014 普及组]螺旋矩阵 时间限制: 1 Sec  内存限制: 128 MB 提交: 18  解决: 0 [提交][状态][讨论版] 题目描 ...

  7. 2321. 【NOIP普及组T1】方程

    2321. [NOIP普及组T1]方程 时间限制: 1000 ms  空间限制: 262144 KB 题目描述

  8. noip2014普及组——珠心算测验

    题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及.    某学校的珠心算老师采用一种快速考察珠 ...

  9. NOIP2014-普及组复赛-第一题-珠心算测验

    题目描述 Description 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及. 某学校的珠心算老师 ...

随机推荐

  1. Spring 启动时加载资源

    Spring加载资源文件目前了解三种, @PostConstruct在Context加载完成之后加载.在创建各个Bean对象之前加载. 实现ApplicationRunner的run方法,Bean加载 ...

  2. python computer info look

    计算机信息查看-. import platform import platform def TestPlatform(): print("---------SYSTEM INFO------ ...

  3. python基础之 线程_进程关系

    上图

  4. win10 64支持承载网络

    在intel官网找到对应型号的网卡驱动. 下载win7版本的,更新驱动.安装完毕之后还要在设备管理里面更新2019 7 30这个版本的驱动. 英特尔® PROSet/无线软件和面向 IT 管理员的驱动 ...

  5. Java版本及历史简述

    Java版本及历史简述 初学Java,对于Java那么多版本很困惑,这里做一点笔记,如有错误希望指出. Java由Sun公司创造,后Sun公司被Oracle公司收购,Java也随之变为Oracle的产 ...

  6. 第一篇 HTML 认识HTML

    认识HTML 学习一门语言,我们要先了解它,可以不用太资深,但要做到别人问,你能回答得出来! 注:推荐大家去网址:www.w3school.com.cn 前端学习手册(免费的) HTML(超文本标记语 ...

  7. k-means 非监督学习聚类算法

    非监督学习 非监督学习没有历史样本数据和标签,直接对数据分析或得结果. k-means 使用 >>> from sklearn.cluster import KMeans >& ...

  8. CDH5.13.3安装手册

    Server端需要打开端口 7180 7182 选址正确的版本,cdh版本不要高于cm版本 CM下载地址 http://archive.cloudera.com/cm5/cm/5/cloudera-m ...

  9. Go语言的基本语法(二)

    一·if   -else (1) package main import "fmt" // if - else //func main(){ // // 先定义 一个变量 // v ...

  10. XAMPP环境搭建及同类推荐

    一.什么是xampp XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包.这个软件包原来的名字是 LAMPP,但是为了避免误解,最新的几个版本就改名为 XAMPP ...