【BZOJ】3771: Triple
http://www.lydsy.com/JudgeOnline/problem.php?id=3771
题意:n个带价值互不相同的物品,每次可以取1、2、3个物品,问能得到的所有的价值和这个价值的方案数(n不明(无意义= =),价值<=40000)
#include <bits/stdc++.h>
using namespace std;
const int N=200005;
int bit[N];
const double PI=acos(-1);
struct cp {
double r, i;
cp(double _r=0, double _i=0) : r(_r), i(_i) {}
cp operator + (const cp &a) { return cp(r+a.r, i+a.i); }
cp operator - (const cp &a) { return cp(r-a.r, i-a.i); }
cp operator * (const cp &a) { return cp(r*a.r-i*a.i, r*a.i+i*a.r); }
};
void dft(cp *a, int n, int flag) {
for(int i=0; i<n; ++i) if(i<bit[i]) swap(a[i], a[bit[i]]);
for(int m=2; m<=n; m<<=1) {
cp wn(cos(PI*2.0/m), sin(PI*2.0/m)*flag);
int mid=m>>1;
for(int i=0; i<n; i+=m) {
cp w(1);
for(int j=0; j<mid; ++j) {
static cp u, v;
u=a[i+j], v=a[i+j+mid]*w;
a[i+j]=u+v;
a[i+j+mid]=u-v;
w=w*wn;
}
}
}
if(flag==-1) for(int i=0; i<n; ++i) a[i].r/=n;
}
void fft(int *A, int *B, int *C, int n) {
static cp a[N], b[N];
int len=1, bitl=-1;
for(; len<n; len<<=1, ++bitl);
for(int i=0; i<len; ++i) bit[i]=(bit[i>>1]>>1)|((i&1)<<bitl);
for(int i=0; i<len; ++i) a[i].r=A[i], a[i].i=0, b[i].r=B[i], b[i].i=0;
dft(a, len, 1); dft(b, len, 1);
for(int i=0; i<len; ++i) b[i]=a[i]*b[i];
dft(b, len, -1);
for(int i=0; i<len; ++i) C[i]=b[i].r+0.5;
}
int a[N], b[N], c[N], t[N], ans[N], n, len;
void work() {
int l=n;
for(int i=0; i<l; ++i) ans[i]=a[i];
fft(a, a, t, n*2-1);
l=n*2-1;
for(int i=0; i<l; ++i) ans[i]+=(t[i]-b[i])>>1;
fft(a, t, t, n*3-2);
fft(a, b, a, n*3-2);
l=n*3-2;
for(int i=0; i<l; ++i) ans[i]+=(t[i]-3*a[i]+(c[i]<<1))/6;
}
int main() {
scanf("%d", &len);
for(int i=0; i<len; ++i) { int x; scanf("%d", &x); a[x]=1; b[x*2]=1; c[x*3]=1; n=max(x+1, n); }
work();
len=n*3-2;
for(int i=0; i<len; ++i) if(ans[i]) printf("%d %d\n", i, ans[i]);
return 0;
}
首先容易得到母函数$A=\sum_{存在价值为i的物品} x^i$
敲完了fft才发现如果直接求母函数的三次方是不对的= =...
妈呀竟然没想到容斥QAQ
设$B = \{A[i]^2\}, C = \{A[i]^3\}$
首先我们对取法分别求:
取1个的方案 $ = A$
取2个的方案 $ = \frac{A^2 - B}{A^{2}_{2}} = \frac{A^2 - B}{2}$
取3个的方案 $ = \frac{A^3 - \frac{3!}{2!1!} AB + \frac{3!}{2!1!} C - C}{A^{3}_{3}} = \frac{A^3 -3AB + 2C}{6}$
(看不懂的建议先去看《组合数学》= =)
然后fft搞搞就行辣= =
【BZOJ】3771: Triple的更多相关文章
- 【BZOJ】3771: Triple FTT+生成函数
[题意]给定n个物品,价值为$a_i$,物品价格互不相同,求选一个或两个或三个的价值为x的方案数,输出所有存在的x和对应方案数.$ai<=40000$. [算法]生成函数+FFT [题解]要求价 ...
- 【BZOJ】3052: [wc2013]糖果公园
http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...
- 【BZOJ】3319: 黑白树
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
- 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...
- 【BZOJ】1013: [JSOI2008]球形空间产生器sphere
[BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...
- 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)
Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...
- 【BZOJ】【3083】遥远的国度
树链剖分/dfs序 其实过了[BZOJ][4034][HAOI2015]T2以后就好搞了…… 链修改+子树查询+换根 其实静态树的换根直接树链剖分就可以搞了…… 因为其实只有一样变了:子树 如果roo ...
- 【BZOJ】【2434】【NOI2011】阿狸的打字机
AC自动机+DFS序+BIT 好题啊……orz PoPoQQQ 大爷 一道相似的题目:[BZOJ][3172][TJOI2013]单词 那道题也是在fail树上数有多少个点,只不过这题是在x的fail ...
- 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法
整体二分+树状数组 过了[BZOJ][2527][POI2011]Meteors以后这题就没那么难啦~ 关键是[从小到大]依次插入数字,然后整体二分每个查询的第k大是在第几次插入中被插入的……嗯大概就 ...
随机推荐
- 【C#】Json数据 排版算法
我从服务器上取得一串Json数据,然后想表示到画面上.不过服务器上取下的Json数据肯定是经过压缩的,空格和换行都没有.如果直接看,可读性非常差. 由于我这个软件是内部管理用的,使用者既能直接看懂Js ...
- Counterfeit Dollar -----判断12枚钱币中的一个假币
Counterfeit Dollar Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u ...
- 无废话ExtJs 入门教程三[窗体:Window组件]
无废话ExtJs 入门教程三[窗体:Window组件] extjs技术交流,欢迎加群(201926085) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3 ...
- 【译】Visual Studio 15 预览版更新说明
序:恰逢Build2016大会召开,微软发布了VS2015的update2更新包和VS2016预览版.本人正在提升英文水平中,于是在这里对VS2016预览版的官方文档进行了部分翻译.因为VS有些功能使 ...
- CentOS版本选择说明
官方下载站http://www.centos.org/download/ 所有版本下载地址http://vault.centos.org/ 首先对一些镜像文件做个简单的介绍: LiveCD一般用来修复 ...
- 在SSIS包中的事务处理
在处理SSIS包的数据ETL操作过程中,我们经常遇到的一个问题就是一系列步骤在运行的过程中,如果中间的一个步骤失败了,那么我们就需要清理前面已经运行过的步骤所产生的数据或者结果,这往往是一个很头疼的过 ...
- 机器学习系列:python
工欲善其事,必先利其器! 机器学习的理论需要有编程语言才能得以实现,我选择 python 作为编程语言,网络上有篇不错的教程:python 初级教程:入门详解. 转载自http://ww ...
- [Java][Weblogic] weblogic.net.http.SOAPHttpsURLConnection incompatible with javax.net.ssl.HttpsURLConnection解决办法
更新20141120: 我始终对修改生产上weblogic上的配置文件这一方法心存担忧(生产上的服务器不允许随便修改,可能会影响到其他应用),所以想使用代码的方式解决此问题,在对方法一失败原因进行了进 ...
- html css js 一些记录.
webstorm 的基本使用 webstorm 格式化 html 代码: Ctrl+Alt+L js html css 基本使用 注意 dom 的 innerHTML会刷新dom,所以里面包含的事件绑 ...
- Redis在Windows下的安装和使用
NoSQL简介 介绍redis前,我想还是先认识下NoSQL,即not only sql, 是一种非关系型的数据存储,key/value键值对存储.现有Nosql DB 产品: Redis/Mongo ...