传送门

这次fftfftfft乱搞居然没有被卡常?

题目简述:给你nnn个数,每三个数ai,aj,ak(i&lt;j&lt;k)a_i,a_j,a_k(i&lt;j&lt;k)ai​,aj​,ak​(i<j<k)组成的所有和以及这些和出现的次数。

读完题直接让我联想到了昨天写过的一道用fftfftfft优化点分治合并的题

,这不是差不多嘛?

只是这一次的容斥要麻烦一些。

我们令原数列转化成的系数序列为{an}\{a_n\}{an​}

那么如果允许重复答案就应该是an3a_n^3an3​

然后展开式子。

我们需要容斥掉的就是有3个数相同的和有2个数相同的。

这个时候已经可以用fftfftfft了。

但是还可以进一步优化。

如何优化?

观察到有两个数相同的其实可以再用一次容斥求出。

因为两个数相同的个数是等于至少两个数相同的个数扣去有三个数相同的个数的。

这样可以优化更多常数。

剩下就是fftfftfft的事啦。

代码:

#include<bits/stdc++.h>
#define ri register int
using namespace std;
inline int read(){
	int ans=0,w=1;
	char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans*w;
}
typedef long long ll;
const int N=(1<<17)+5,delta=20000;
const double pi=acos(-1.0);
struct Complex{
	double x,y;
	inline Complex operator+(const Complex&b){return (Complex){x+b.x,y+b.y};}
	inline Complex operator-(const Complex&b){return (Complex){x-b.x,y-b.y};}
	inline Complex operator*(const Complex&b){return (Complex){x*b.x-y*b.y,y*b.x+x*b.y};}
	inline Complex operator/(const double&b){return (Complex){x/b,y/b};}
}a[N],b[N],c[N];
int n,lim,tim,A[N],B[N],C[N],pos[N];
inline void fft(Complex *a,int type){
	for(ri i=0;i<lim;++i)if(i<pos[i])swap(a[i],a[pos[i]]);
	for(ri mid=1;mid<lim;mid<<=1){
		Complex wn=(Complex){cos(pi/mid),type*sin(pi/mid)};
		for(ri j=0,len=mid<<1;j<lim;j+=len){
			Complex w=(Complex){1,0};
			for(ri k=0;k<mid;++k,w=w*wn){
				Complex a0=a[j+k],a1=a[j+k+mid]*w;
				a[j+k]=a0+a1,a[j+k+mid]=a0-a1;
			}
		}
	}
	if(type==-1)for(ri i=0;i<lim;++i)a[i]=a[i]/lim;
}
inline void init(){
	lim=1<<17,tim=17;
	for(ri i=0;i<lim;++i)pos[i]=(pos[i>>1]>>1)|((i&1)<<(tim-1));
}
int main(){
	freopen("lx.in","r",stdin);
	n=read(),init();
	for(ri i=1,val;i<=n;++i)val=read()+delta,++A[val],++B[val*2],++C[val*3];
	for(ri i=0;i<lim;++i)a[i].x=A[i],b[i].x=B[i],c[i].x=C[i];
	fft(a,1),fft(b,1);
	for(ri i=0;i<lim;++i)c[i]=a[i]*(a[i]*a[i]-(Complex){3,0}*b[i]);
	fft(c,-1);
	for(ri i=0;i<lim;++i){
		ll cnt=((ll)(c[i].x+0.5)+2*C[i])/6;
		if(cnt)cout<<i-3*delta<<" : "<<cnt<<'\n';
	}
	return 0;
}

2018.11.18 spoj Triple Sums(容斥原理+fft)的更多相关文章

  1. SPOJ Triple Sums(FFT+容斥原理)

    # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream& ...

  2. SPOJ TSUM Triple Sums(FFT + 容斥)

    题目 Source http://www.spoj.com/problems/TSUM/ Description You're given a sequence s of N distinct int ...

  3. 2018.12.31 bzoj3771: Triple(生成函数+fft+容斥原理)

    传送门 生成函数经典题. 题意简述:给出nnn个数,可以从中选1/2/31/2/31/2/3个,问所有可能的和对应的方案数. 思路: 令A(x),B(x),C(x)A(x),B(x),C(x)A(x) ...

  4. 2018.11.18 bzoj2194: 快速傅立叶之二(fft)

    传送门 模板题. 将bbb序列反过来然后上fftfftfft搞定. 代码: #include<bits/stdc++.h> #define ri register int using na ...

  5. SPOJ - Triple Sums

    [传送门] FFT第一题! 构造多项式 $A(x) = \sum x ^ {s_i}$. 不考虑题目中 $i < j < k$ 的条件,那么 $A^3(x)$ 每一项对应的系数就是答案了. ...

  6. 2018.11.24 spoj New Distinct Substrings(后缀数组)

    传送门 双倍经验(弱化版本) 考虑求出来heightheightheight数组之后用增量法. 也就是考虑每增加一个heightheightheight对答案产生的贡献. 算出来是∑∣S∣−heigh ...

  7. 2018.11.18 Sturts2配置详解&常量配置进阶

    1.基于struts.xml 的节点参数配置 package节点 action节点 result节点 include节点 2.struts常量配置以及如何修改为自己的想要的配置 2.1struts默认 ...

  8. OI生涯回忆录 2018.11.12~2019.4.15

    上一篇:OI生涯回忆录 2017.9.10~2018.11.11 一次逆风而行的成功,是什么都无法代替的 ………… 历经艰难 我还在走着 一 NOIP之后,全机房开始了省选知识的自学. 动态DP,LC ...

  9. China Intelligent Office Summit(2018.11.21)

    时间:2018.11.21地点:中关村软件园国际会议中心

随机推荐

  1. 二次注入的学习--Buy Flag(http://10.112.68.215:10002)

    这次有做一个二次注入的天枢CTF题目,算是完整地理解了一遍注入的知识.来,启航.   1.判断注入点     经过对题目的实践分析,知道注册时需要输入年龄大于18岁,但在登录后界面,年龄因为太大不能接 ...

  2. Kylin Cube构建过程优化

    原文地址:https://kylin.apache.org/docs16/howto/howto_optimize_build.html Kylin将一个cube的build过程分解为若干个子步骤,然 ...

  3. Java06-java基础语法(五)数组

    Java06-java基础语法(五)数组 一.循环的嵌套 在一个循环体内部再含有一个或多个循环 强调:内循环全部做完以后再去执行下一次的外循环 int k = 0; for(int i = 0; i& ...

  4. 纯css实现div中未知尺寸图片的垂直居中

    1.淘宝的方法 在曾经的"淘宝UED招聘"中有这样一道题目: “使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中.” 当然出题并不是 ...

  5. [z]vc boost安装

    1.下载boost_1_43_0.zip(具体到哪里下载,自己搞定) 2.解压boost_1_43_0.zip(我的是直接解压放在F盘) 3.启动vc的Command Prompt编译生成bjam.e ...

  6. springboot项目maven报错 LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback

    完整信息如下 SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/D:/deve ...

  7. TCP Nagle算法&&延迟确认机制

    TCP Nagle算法&&延迟确认机制 收藏 秋风醉了 发表于 3年前 阅读 1367 收藏 0 点赞 0 评论 0 [腾讯云]买域名送云解析+SSL证书+建站!>>> ...

  8. 关于ip包长度

    http://blog.csdn.net/naturebe/article/details/6712153 这篇文章总结的不错,转自:http://hi.baidu.com/to_wait/blog/ ...

  9. ok,机房小感

    难得一次能早来机房,趁今天考完试没啥事,随便写两句牢骚. 学习与编程 老师曾经在招生的时候认真讨论过这个问题,这两者彼此协调并不是一件容易事,很明显,编程是一门大课.它虽然与理科有一定联系,但不代表它 ...

  10. Vue 不同环境配置相应的 API 地址

    我使用的是 Vue + ElementUI 进行构建的项目,在开发过程中,使用的是前后端分离的模式,所以经常会出现多环境配置信息,尤其是 Api 接口地址的配置,如果在代码中使用判断的方式,感觉不友好 ...