[2017纪中10-23]幸运值 组合数学 位运算
来源:互联网 发布:餐厅排队叫号软件 编辑:程序博客网 时间:2024/06/01 21:52
题目链接:https://jzoj.net/senior/#main/show/5414
显然,每一位是独立的。对每一位分别考虑贡献。
那么,对于每一位,这些数中哪些是1哪些是0不重要,重要的是有几个1几个0。
假设第x位有b个1,n-b个0,求选出奇数个(不超过k)1的方案数。显然等于sigma(C(b,i)*C(n-b,k-i)){1<=i<=k且i为奇数}。
预处理阶乘和阶乘逆元。注意C(n,m)n < m的情况。
代码:
#include<iostream>#include<cstdio>#define ll long longusing namespace std;const int mod=998244353;const int maxn=100010;int n,k;ll jie[maxn],inv[maxn],a[maxn];ll ksm(ll a,int b){ll re=1;while(b){if(b&1) re=re*a%mod;a=a*a%mod;b>>=1;}return re;}int main(){ scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); jie[0]=inv[0]=1; for(int i=1;i<=n;i++) { jie[i]=jie[i-1]*i%mod; inv[i]=ksm(jie[i],mod-2); } ll ans=0; for(int i=0;i<=30;i++) { int b=0; for(int j=1;j<=n;j++) b+=((a[j]>>i)&1); for(int j=1;j<=min(k,b);j++) if(j&1&&n-b>=k-j) ans=(ans+jie[b]*jie[n-b]%mod*inv[j]%mod*inv[b-j]%mod*inv[k-j]%mod*inv[n-b-k+j]%mod*(1ll<<i)%mod)%mod; } printf("%lld",ans); return 0;}
阅读全文
0 0
- [2017纪中10-23]幸运值 组合数学 位运算
- hdoj4810Wall Painting【组合数学+位运算】
- hdu4810 wall painting 组合数学+位运算
- hdu 4810 Wall Painting (位运算+组合数学)
- 组合数学专题:【BZOJ1853】【SCOI2010】幸运数字
- [2017纪中10-24]合影 树型DP+组合数学
- 位运算求组合
- 数学与位运算
- 数学 模+位运算
- SSL2795 2017年10月26日提高组T2 幸运值(组合)
- BZOJ1853 [Scoi2010]幸运数字 [容斥原理]【组合数学】
- 产生组合数,位运算
- 位运算求组合,poj2453
- HDU 4810 Wall Painting(组合数学 + 位运算)——2013ACM/ICPC亚洲区南京站现场赛
- shell中数学运算
- shell中数学运算
- python中数学运算
- 位运算与组合搜索(一)
- Labview与状态机/状态图的概念
- Verilog入门
- SpringMVC中关于静态资源拦截的处理
- 最敬佩的人
- 全部文章分类总链接
- [2017纪中10-23]幸运值 组合数学 位运算
- Codeforces 883G Orientation of Edges(BFS+MAP)
- 明天是几号
- GitHub管理项目
- android实现导航栏
- JavaScript基础 类型转换
- MyBatis入门简单的CRUD
- Linux配置android studio的一些问题总结
- javaScript数据类型