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

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

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

真是一道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. # IDEA相关知识

    目录 IDEA相关知识 安装目录下: 配置目录下: 工程目录下: 名词解释 IDEA相关知识 安装目录下: bin:启动文件,配置信息,IDEA的一些属性信息 jre64:IDEA自带的运行环境 li ...

  2. IOS订阅优惠-PHP生成ECDSA算法签名

    <?php use Ramsey\Uuid\Uuid; class ItunesSignatureGenerator { private $appBundleID = 'www.u17.com' ...

  3. redis在php中实际应用-hash

    Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象. 目录: 1.批量赋值:hmset,hmget,hgetall 可用于存储一条条数据,即一个 ...

  4. 小白学习django第五站-简易案例

    首先在setting.py文件中编写数据库配置内容 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': ' ...

  5. python-redis缓存-pool

    #连接池 import redis pool=redis.ConnectionPool(host='192.168.71.140', port=6379) r = redis.Redis(connec ...

  6. java实现spark常用算子之count

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...

  7. ThinkPHP依赖注入

    D:\wamp64\www\thinkphp5.1\tp5.1\application\index\controller\Demo1.php文件 <?php namespace app\inde ...

  8. 关于python3.8的一些新特性的解析与代码演示

    python3.8测试版出来了,我们来介绍一些变动,代码演示一下,当然底层相关的细节变动就不介绍了 只允许传位置参数 还记得如果我们想让某些参数只能以关键字参数的方式传递该怎么做吗? def foo1 ...

  9. jq常用方法

    $().addClass(css中定义的样式类型);            给某个元素添加样式$().attr({src:”test.jpg”,alt:”test Image”});        给 ...

  10. 小程序UI设计(2)-符合视觉规范-字体规范

    下图是微信小程序官方要求字体规范 根据此要求小程序设计工具定制了符合规范的组件.如下图 工具使用时,将左侧组件拖拽到设计区域即可.字体大小和颜色都是按照规范设置的.在使用时根据微信要求在不同位置摆放即 ...