BZOJ 4036 [HAOI2015]按位或
来源:互联网 发布:电池模拟器软件 编辑:程序博客网 时间:2024/06/06 13:57
快速莫比乌斯变换
关于集合幂级数的更多内容请看2015年集训队论文最后一篇VFK的。orz orz
主要思路就是把求一个集合幂级数的卷积转化成一个求子集和的问题。过程是作出莫比乌斯变换,变成求和,再快速莫比乌斯反演回去。
记
那我们要求的就是
对两边做莫比乌斯变换
我们希望快速求出右边,从而反演出左边,观察
整合一下,有
因此,有
右边的和式可以通过扰动法求出等比数列的和,显然是收敛的,即
把
一个细节是上述的等比数列求和时,若
#include<cstdio>#define N 21using namespace std;namespace runzhe2000{ int n, g[1<<N]; double f[1<<N], h; void main() { scanf("%d",&n); int U = (1<<n)-1, V; g[0] = 1; for(int i = 0; i <= U; i++) { scanf("%lf",&f[i]); i?g[i] = -g[i-(i&-i)]:0; f[i]?V|=i:0; } if(V!=U){puts("INF");return;} for(int i = 0; i < n; i++) for(int j = 1; j <= U; j++) (j&(1<<i)) ? f[j] += f[j-(1<<i)] : 0; for(int i = 0; i < U; i++) h += g[i] / (f[i] - 1); printf("%.8lf\n",h); }}int main(){ runzhe2000::main();}
0 0
- BZOJ 4036 [HAOI2015]按位或
- BZOJ 4036([HAOI2015]按位或-子集和变换)
- [FMT][DP] BZOJ 4036: [HAOI2015]按位或
- 4036: [HAOI2015]按位或
- [FMT 莫比乌斯变换 子集和变换] BZOJ 4036 [HAOI2015]按位或
- bzoj 4036: [HAOI2015]Set 子集和变换
- bzoj 4034: [HAOI2015]T2
- BZOJ 4034: [HAOI2015]T2
- bzoj 4033: [HAOI2015]T1
- BZOJ 4033: [HAOI2015]T1
- BZOJ 4034 [HAOI2015]T2
- bzoj 4034 [HAOI2015]T2
- BZOJ 4034 [HAOI2015]T2 树链剖分
- [BZOJ 4034][HAOI2015]T2 [树链剖分]
- BZOJ 4033 [HAOI2015]树上染色
- BZOJ 4035 [HAOI2015]数组游戏
- BZOJ 4034 [HAOI2015]树上操作
- bzoj 4034 [HAOI2015]树上操作
- java ExecutorService
- C语言实现单链表以及链表对应的面试题
- Call to undefined function mcrypt_module_open()
- 模拟实现memmove
- 又一个乱码问题------ gbk和utf8
- BZOJ 4036 [HAOI2015]按位或
- 列表框的成员函数与使用用例
- 表单提交2次
- linux常用软件安装方法
- Activity
- SnackBar的样式使用(改变颜色以及设置action)
- 第八章 函数探幽
- 【Mysql】存储引擎
- gcc编译器的使用