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

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

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

真是一道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. 【DP 好题】Kick Start 2019 Round C Catch Some

    题目链接 题目大意 在一条数轴上住着 $N$ 条狗和一个动物研究者 Bundle.Bundle 的坐标是 0,狗的坐标都是正整数,可能有多条狗住在同一个位置.每条狗都有一个颜色.Bundle 需要观测 ...

  2. ASP.NET Core WebApi使用Swagger生成API说明文档【xml注释版】

    ⒈新建ASP.NET Core WebAPi项目 ⒉添加 NuGet 包 Install-Package Swashbuckle.AspNetCore ⒊Startup中配置 using System ...

  3. 【转】在C#中使用Json.Net进行序列化和反序列化及定制化

    作者:Minotauros 原文地址:在C#中使用Json.Net进行序列化和反序列化及定制化 序列化(Serialize)是将对象转换成字节流,并将其用于存储或传输的过程,主要用途是保存对象的状态, ...

  4. C++练习 | 单链表的创建与输出(结构体格式)

    #include <iostream> #include <stdio.h> using namespace std; #define OK 1 #define ERROR 0 ...

  5. 从入门到自闭之Python名称空间

    名称空间: 内置空间:python解释器自带的一块空间 全局空间:py文件中顶格写的就是全局空间 局部空间:函数体中就是局部空间 加载顺序: 内置空间 全局空间 局部空间 # def func(): ...

  6. Android SDK安装与环境配置

    一.单独下载只有sdk的包,SDK不包括在Android Studio里,适用于不需要Android Studio的用户,其他可自行去官网下载. 1:Android SDK (https://www. ...

  7. 使用jdbc操作ClickHouse

    使用jdbc操作ClickHouse 2018年07月01日 01:33:00 狮子头儿 阅读数 10501   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处 ...

  8. SqlSugar

    SqlSugar 官网 SqlSugar 源码 SqlSugar NuGet

  9. 08 Python爬虫之selenium

    ---恢复内容开始--- 一. 先介绍图片懒加载技术 当获取一个网站的图片数据时,只能爬取到图片的名称,并不能获得链接,而且也不能获得xpath表达式.这是应用了图片懒加载技术. - 图片懒加载技术的 ...

  10. cube-ui indexList的正确使用

    demo地址:https://github.com/zphtown/cube-ui-bug 上拉和下拉核心代码: onPullingDown () { this.isNoMore = false th ...