[SP8372-TSUM]Triple Sums
题面在这里
description
某\(B\)姓\(OJ\)权限题
给出\(n\)个正整数\(a[i]\),求\(i<j<k\)且\(S=a[i]+a[j]+a[k]\)的三元组\((i,j,k)\)的个数
需要对所有可能的\(S\)进行求解
data range
\]
solution
考虑构造生成函数求解
构造\(A(x)=\sum_{i=1}^{n}x^{a[i]},B(x)=\sum_{i=1}^{n}x^{2\times a[i]},C(x)=\sum_{i=1}^{n}x^{3\times a[i]}\)
然后容斥:$$f(x)=\frac{A(x)^3-3A(x)B(x)+2C(x)}{6}$$
code
这里本人写得复杂
#include<bits/stdc++.h>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<iomanip>
#include<cstring>
#include<complex>
#include<vector>
#include<cstdio>
#include<string>
#include<bitset>
#include<ctime>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define FILE "a"
#define mp make_pair
#define pb push_back
#define RG register
#define il inline
using namespace std;
typedef unsigned long long ull;
typedef vector<int>VI;
typedef long long ll;
typedef double dd;
const dd eps=1e-10;
const int mod=1e9+7;
const int N=1000010;
const dd pi=acos(-1);
const int inf=2147483647;
const ll INF=1e18+1;
il ll read(){
RG ll data=0,w=1;RG char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1,ch=getchar();
while(ch<='9'&&ch>='0')data=data*10+ch-48,ch=getchar();
return data*w;
}
il void file(){
srand(time(NULL)+rand());
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
}
struct point{dd r,i;}a[N],b[N];
il point operator +(point a,point b){return (point){a.r+b.r,a.i+b.i};}
il point operator -(point a,point b){return (point){a.r-b.r,a.i-b.i};}
il point operator *(point a,point b){
return (point){a.r*b.r-a.i*b.i,a.r*b.i+a.i*b.r};
}
int r[N],l;
il void FFT(point *a,int n,int opt){
for(RG int i=0;i<n;i++)if(i<r[i])swap(a[i],a[r[i]]);
for(RG int i=2;i<=n;i<<=1){
point wn=(point){cos(2*pi/i),opt*sin(2*pi/i)};
for(RG int j=0;j<n;j+=i){
point w=(point){1,0};
for(RG int k=j;k<j+(i>>1);k++,w=w*wn){
point x=a[k+(i>>1)]*w;
a[k+(i>>1)]=a[k]-x;
a[k]=a[k]+x;
}
}
}
if(opt==-1)for(RG int i=0;i<n;i++)a[i].r/=n;
}
int n,lim,m,len,A[N];ll f[N],g[N],h[N];
int main()
{
n=read();lim=inf;m=120000;for(len=1,l=0;len<=m;len<<=1,l++);
for(RG int i=0;i<len;i++)r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));
for(RG int i=1;i<=n;i++)A[i]=read();lim=-20000;
for(RG int i=1;i<=n;i++){
f[A[i]-lim]++;g[2*A[i]-2*lim]++;h[3*A[i]-3*lim]++;
}
for(RG int i=0;i<len;i++)a[i].r=g[i],b[i].r=f[i];
FFT(a,len,1);FFT(b,len,1);
for(RG int i=0;i<len;i++)a[i]=a[i]*b[i];
FFT(a,len,-1);
for(RG int i=0;i<len;i++)g[i]=(ll)(a[i].r+0.5);
for(RG int i=0;i<len;i++)a[i].r=f[i],a[i].i=0;
FFT(a,len,1);
for(RG int i=0;i<len;i++)a[i]=a[i]*a[i]*a[i];
FFT(a,len,-1);
for(RG int i=0;i<len;i++)f[i]=(ll)(a[i].r+0.5);
for(RG int i=0;i<=m;i++)
if((f[i]-3*g[i]+2*h[i])/6>0)
printf("%d : %lld\n",i+3*lim,(f[i]-3*g[i]+2*h[i])/6);
return 0;
}
[SP8372-TSUM]Triple Sums的更多相关文章
- SPOJ TSUM Triple Sums(FFT + 容斥)
题目 Source http://www.spoj.com/problems/TSUM/ Description You're given a sequence s of N distinct int ...
- spoj TSUM - Triple Sums fft+容斥
题目链接 首先忽略 i < j < k这个条件.那么我们构造多项式$$A(x) = \sum_{1现在我们考虑容斥:1. $ (\sum_{}x)^3 = \sum_{}x^3 + 3\s ...
- SPOJ:Triple Sums(母函数+FFT)
You're given a sequence s of N distinct integers.Consider all the possible sums of three integers fr ...
- 2018.11.18 spoj Triple Sums(容斥原理+fft)
传送门 这次fftfftfft乱搞居然没有被卡常? 题目简述:给你nnn个数,每三个数ai,aj,ak(i<j<k)a_i,a_j,a_k(i<j<k)ai,aj,ak( ...
- Spoj 8372 Triple Sums
题意:给你n个数字,对于任意s,s满足\(s=u_i+u_j+u_k,i<j<k\),要求出所有的s和对应满足条件的i,j,k的方案数 Solution: 构造一个函数:\(A(x)=\s ...
- SPOJ Triple Sums(FFT+容斥原理)
# include <cstdio> # include <cstring> # include <cstdlib> # include <iostream& ...
- spoj-TSUM Triple Sums
题目描述 题解: 很吊的容斥+$FFT$,但是并不难. 首先,由于有重复,我们要容斥. 怎么办? 记录三个多项式, 只取一个:$w1$; 相同物体拿两个:$w2$; 相同物体拿三个:$w3$; 然后答 ...
- SPOJ - Triple Sums
[传送门] FFT第一题! 构造多项式 $A(x) = \sum x ^ {s_i}$. 不考虑题目中 $i < j < k$ 的条件,那么 $A^3(x)$ 每一项对应的系数就是答案了. ...
- 多项式相关&&生成函数相关&&一些题目(updating...)
文章目录 多项式的运算 多项式的加减法,数乘 多项式乘法 多项式求逆 多项式求导 多项式积分 多项式取对 多项式取exp 多项式开方 多项式的除法/取模 分治FFT 生成函数 相关题目 多项式的运算 ...
随机推荐
- GDAL中GDALDataset::RasterIO分块读取的实现
GDALDataset类中的RasterIO函数能够对图像任意指定区域.任意波段的数据按指定数据类型.指定排列方式读入内存和写入文件中,因此可以实现对大影像的分块读.写运算操作.针对特大的影像图像,有 ...
- underscore.js 分析 第一天
Underscore 是一个非常实用的Javascript类库. 通过研究他能提高自身的JS水平. 我们看到整个代码被 (function() { /* 代码 */ }.call(this)); 包 ...
- MyEclipse相关用法介绍
MyEclipse相关用法介绍 ================================================================================ 编辑: ...
- 程序迭代时测试操作的要点(后端&前端)
今晚直播课内容简介,视频可点击链接免费听 <程序迭代时测试操作的要点(后端&前端)> ===== 1:迭代时后台涉及的操作有哪些?如何进行 a.更新war包:用于访问web\app ...
- Linux命令应用大词典-第39章 网络安全
39.1 rtacct:网络统计工具 39.2 nmap:报告远程主机特征 39.3 tcpdump:实现网络数据采集分析 39.4 iptstate:显示IP表状态表条目 39.5 nstat:监控 ...
- Unity Lighting - Lighting overview 照明概述
Lighting overview 照明概述 In order to calculate the shading of a 3D object, Unity needs to know the ...
- 前端开发工程师 - 02.JavaScript程序设计 - 期末考试
期末考试客观题 期末考试主观题 https://www.15yan.com/story/aY0HWAQ7oNU/ 1(8分) 函数myType用于根据输入参数返回相应的类型信息. 语法如下: ...
- python爬虫基础之一(爬淘宝)
没想到python如此强大, 今天看一会视频学会了一段python爬虫 这就是我今天学到的内容爬去淘宝网关于书包的一些信息,包括价格, #coding=utf-8 import requests#导入 ...
- 【radio-group、radio】 单选项组件说明
radio-group组件是包裹radio组件的容器 原型: <radio-group bindchange="[EventHandle]"> <radio .. ...
- 【WXS全局对象】Math
Math对象用于执行数学任务. 属性: 名称 说明 Math.E 代表算术常量 e,即自然对数的底数,其值近似于 2.71828. Math.LN10 就是 loge10,即 10 的自然对数,其值近 ...