SPOJ Triple Sums(FFT+容斥原理)
- # include <cstdio>
- # include <cstring>
- # include <cstdlib>
- # include <iostream>
- # include <vector>
- # include <queue>
- # include <stack>
- # include <map>
- # include <complex>
- # include <set>
- # include <cmath>
- # include <algorithm>
- using namespace std;
- # define lowbit(x) ((x)&(-x))
- const double pi=acos(-1.0);
- # define eps 1e-
- # define MOD
- # define INF
- # define mem(a,b) memset(a,b,sizeof(a))
- # define FOR(i,a,n) for(int i=a; i<=n; ++i)
- # define FDR(i,a,n) for(int i=a; i>=n; --i)
- # define bug puts("H");
- # define lch p<<,l,mid
- # define rch p<<|,mid+,r
- # define mp make_pair
- # define pb push_back
- typedef pair<int,int> PII;
- typedef vector<int> VI;
- # pragma comment(linker, "/STACK:1024000000,1024000000")
- typedef long long LL;
- inline int Scan() {
- int x=,f=; char ch=getchar();
- while(ch<''||ch>''){if(ch=='-') f=-; ch=getchar();}
- while(ch>=''&&ch<=''){x=x*+ch-''; ch=getchar();}
- return x*f;
- }
- inline void Out(int a) {
- if(a<) {putchar('-'); a=-a;}
- if(a>=) Out(a/);
- putchar(a%+'');
- }
- const int N=;
- //Code begin....
- typedef complex<double> cmx;
- int c[N<<], val[N<<], a[N<<], b[N<<];
- cmx x[N<<], y[N<<];
- void change(cmx x[], int len) {
- int i, j, k;
- for(i=, j=len>>; i<len-; ++i) {
- if(i<j) swap(x[i],x[j]);
- k=len>>;
- while(j>=k) j-=k, k>>=;
- if(j<k) j+=k;
- }
- }
- void fft(cmx x[], int len, int on) {
- change(x,len);
- for(int i=; i<=len; i<<=) {
- cmx wn(cos(-on**pi/i),sin(-on**pi/i));
- for(int j=; j<len; j+=i) {
- cmx w(,);
- FOR(k,j,j+i/-) {
- cmx u=x[k], v=x[k+i/]*w;
- x[k]=u+v; x[k+i/]=u-v; w*=wn;
- }
- }
- }
- if(on==-) FOR(i,,len-) x[i]/=len;
- }
- int main()
- {
- int n, maxx=;
- cmx three(3.0,);
- scanf("%d",&n);
- FOR(i,,n) scanf("%d",val+i), val[i]+=, maxx=max(maxx,val[i]);
- maxx*=;
- FOR(i,,n) ++a[val[i]], ++b[val[i]*], ++c[val[i]*];
- int len=;
- while(len<maxx) len<<=; //len要为2的幂次
- FOR(i,,len-) x[i]=cmx(a[i],), y[i]=cmx(b[i],);
- fft(x,len,); fft(y,len,); //将系数表达式转化为点值表达式
- FOR(i,,len-) x[i]=x[i]*x[i]*x[i]-x[i]*y[i]*three;
- fft(x,len,-);
- FOR(i,,len-) a[i]=(int(x[i].real()+0.5)+*c[i])/;
- FOR(i,,len-) {
- if(!a[i]) continue;
- printf("%d : %d\n", i-*,a[i]);
- }
- return ;
- }
SPOJ Triple Sums(FFT+容斥原理)的更多相关文章
- 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 TSUM - Triple Sums fft+容斥
题目链接 首先忽略 i < j < k这个条件.那么我们构造多项式$$A(x) = \sum_{1现在我们考虑容斥:1. $ (\sum_{}x)^3 = \sum_{}x^3 + 3\s ...
- 【BZOJ3771】Triple 生成函数 FFT 容斥原理
题目大意 有\(n\)把斧头,不同斧头的价值都不同且都是\([0,m]\)的整数.你可以选\(1\)~\(3\)把斧头,总价值为这三把斧头的价值之和.请你对于每种可能的总价值,求出有多少种选择方案. ...
- BZOJ3771 Triple(FFT+容斥原理)
思路比较直观.设A(x)=Σxai.先把只选一种的统计进去.然后考虑选两种,这个直接A(x)自己卷起来就好了,要去掉选同一种的情况然后除以2.现在得到了选两种的每种权值的方案数,再把这个卷上A(x). ...
- SPOJ - Triple Sums
[传送门] FFT第一题! 构造多项式 $A(x) = \sum x ^ {s_i}$. 不考虑题目中 $i < j < k$ 的条件,那么 $A^3(x)$ 每一项对应的系数就是答案了. ...
- 【bzoj3771】Triple FFT+容斥原理
题目描述 樵夫的每一把斧头都有一个价值,不同斧头的价值不同.总损失就是丢掉的斧头价值和. 他想对于每个可能的总损失,计算有几种可能的方案. 注意:如果水神拿走了两把斧头a和b,(a,b)和(b,a)视 ...
- The Preliminary Contest for ICPC Asia Shanghai 2019 C Triple(FFT+暴力)
The Preliminary Contest for ICPC Asia Shanghai 2019 C Triple(FFT+暴力) 传送门:https://nanti.jisuanke.com/ ...
- SPOJ TSUM Triple Sums(FFT + 容斥)
题目 Source http://www.spoj.com/problems/TSUM/ Description You're given a sequence s of N distinct int ...
- SPOJ:Triple Sums(母函数+FFT)
You're given a sequence s of N distinct integers.Consider all the possible sums of three integers fr ...
随机推荐
- 学生管理之Bootstrap初体验
Bootstrap,来自 Twitter,是目前比较受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. Bootstra ...
- 取值:form表单取值、input框绑定取值
1. form表单取值1.1 方式一,通过<form bindsubmit="formSubmit">与<button formType="submit ...
- monkey测试入门3
本文要感谢一起战斗过的点时小伙伴,程童鞋 打开开始 输入cmd 看到它的目录地址 然后把adb压缩包解压到该地址 插入数据线 打开手机设置打开开发者选项 打开USB调试 右键点击我的电脑 选择管理 左 ...
- php 文件上传缩略图路径分析类
<?php //文件上传时分析路径信息 //author:songzhenghe 2014-1-24 //version 0.1 class path_ana { private $da ...
- 角色和武器Shader特效开发
角色Shader的动效需求 角Shader的开发不知要实现最基础光照等功能, 可能还要在角色武器的Shader增加多种动效, 比如因武器品质区分的流光特效, 被技能击中时的冻结效果. 这类动效的实现方 ...
- C#多线程的几种使用
参见链接 :http://www.jb51.net/article/46234.htm
- PLSQL面向对象
```sql --定义可被SQL语句调用的子程序 create or replace function getempdept( p_empno emp.empno%type )return ...
- kubernetes dashboard 安装时出现9090: getsockopt: connection refused错误
转载于:https://blog.csdn.net/lucy06/article/details/79082302 安装kubernetes dashboard时,出现错误: Error: 'dia ...
- Redis勒索事件爆发,如何避免从删库到跑路?
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB发表于云+社区专栏 9月10日下午,又一起规模化利用Redis未授权访问漏洞攻击数据库的事件发生,此次 ...
- [奇葩问题] ERROR 2013 (HY000): Lost connection to MySQL server during query
查询一条耗时30s以上语句,实际为2分钟多. mysql> select version(); +------------+ | version() | +------------+ | 5.6 ...