Description

校庆志愿者小Z在休息时间和同学们玩卡牌游戏。一共有n张卡牌,每张卡牌上有一个数Ai,每次可以从中选出k张卡牌。一种选取方案的幸运值为这k张卡牌上数的异或和。小Z想知道所有选取方案的幸运值之和除以998244353的余数。

Input

输入的第一行有两个整数n和k。
第二行有n个整数,表示序列A。

Output

一个整数表示答案。

Sample Input

输入1:

3 2
1 2 3

输入2:

10 5
123 456 789 987 654 321 101 202 303 404

Sample Output

输出1:

6

输出2:

130776

Data Constraint

对于30%的数据满足,1<=n<=20
对于另30%的数据满足,1<=n<=100,0

Hint

样例1幸运值之和为(1 ⊕ 2) + (1 ⊕ 3) + (2 ⊕ 3) = 6

Solution

  • 我们发现每一位的答案与选了哪些数无关,而与哪一位的0、1数量有关。

  • 于是我们统计出这 NN 个数的每一位的0、1数。

  • 对于每一位,我们设有 xx 个 11 ,那么则有 n−xn-x 个 00 。

  • 要在其中选 kk 个数,又发现其异或和只与 11 的个数的奇偶性有关。

  • 那么这一位的答案即为:

    ∑j=1,j≡1(mod 2)xCjx∗Ck−jn−x

    \sum^{x}_{j=1,j≡1(mod\ 2)}C^{j}_{x}*C^{k-j}_{n-x}

  • 即选一些数作为1、另一些数作为0的组合数。

  • 注意特判 CyxC^y_x 中当 x<yx 时返回 00 。

  • 时间复杂度为 N log AiN\ log\ A_i 。

Code

#include<cstdio>
#include<cmath>
using namespace std;
const int N=1e5+1,mo=998244353;
int mx;
long long ans;
int f[31];
long long g[N],h[N];
inline int read()
{int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w;
}
inline long long ksm(long long x,int y)
{long long s=1;while(y){if(y&1) s=s*x%mo;x=x*x%mo;y>>=1;}return s;
}
inline long long C(int x,int y)
{if(x<y) return 0;return g[x]*h[x-y]%mo*h[y]%mo;
}
int main()
{int n=read(),k=read();for(int i=1;i<=n;i++){int x=read(),y=log2(x);if(y>mx) mx=y;for(int j=0;j<=y;j++) f[j]+=x&1,x>>=1;}long long p=g[0]=h[0]=1;for(int i=1;i<=n;i++) g[i]=g[i-1]*i%mo;h[n]=ksm(g[n],mo-2);for(int i=n-1;i;i--) h[i]=h[i+1]*(i+1)%mo;for(int i=0;i<=mx;i++,p<<=1)for(int j=1,q=f[i]<k?f[i]:k;j<=q;j+=2)ans=(ans+C(n-f[i],k-j)*C(f[i],j)%mo*p%mo)%mo;printf("%lld",ans);return 0;
}

JZOJ 5414. 【NOIP2017提高A组集训10.22】幸运值相关推荐

  1. JZOJ 5415. 【NOIP2017提高A组集训10.22】公交运输

    Description 城市中有一条长度为n的道路,每隔1的长度有一个公交车站,编号从0到n,学校在0号车站的位置.其中每个公交车站(除了n号车站)有两个属性ci和vi,代表从这个公交车站出发的公交车 ...

  2. 【JZOJ 5410】【NOIP2017提高A组集训10.22】小型耀斑

    Description Uthuso 的核反应失控了,她在地灵殿释放了几颗大核弹.地灵殿可以看做一个大小为n*m 的矩阵.一颗大小为k 的核弹,对于任意一个与爆炸中心曼哈顿距离小于k 的地区,会造成( ...

  3. JZOJ 5410. 【NOIP2017提高A组集训10.22】小型耀斑

    Description Uthuso 的核反应失控了,她在地灵殿释放了几颗大核弹.地灵殿可以看做一个大小为n*m 的矩阵.一颗大小为k 的核弹,对于任意一个与爆炸中心曼哈顿距离小于k 的地区,会造成( ...

  4. jzoj5410【NOIP2017提高A组集训10.22】小型耀斑

    题目 Description Uthuso 的核反应失控了,她在地灵殿释放了几颗大核弹.地灵殿可以看做一个大小为n*m 的矩阵.一颗大小为k 的核弹,对于任意一个与爆炸中心曼哈顿距离小于k 的地区,会 ...

  5. JZOJ5411. 【NOIP2017提高A组集训10.22】友谊 DP

    DescriptionFlowey 是一朵能够通过友谊颗粒传播LOVE 的小花.它的友谊颗粒分为两种, 圆粒的和皱粒的,它们依次排列组成了一个长度为2m 的序列.对于一个友谊颗 粒的序列,如果存在1& ...

  6. 【JZOJ5410】【NOIP2017提高A组集训10.22】小型耀斑

    Description Uthuso 的核反应失控了,她在地灵殿释放了几颗大核弹.地灵殿可以看做一个大小为n*m 的矩阵.一颗大小为k 的核弹,对于任意一个与爆炸中心曼哈顿距离小于k 的地区,会造成( ...

  7. 【JZOJ5411】【NOIP2017提高A组集训10.22】友谊

    Description Flowey 是一朵能够通过友谊颗粒传播LOVE 的小花.它的友谊颗粒分为两种, 圆粒的和皱粒的,它们依次排列组成了一个长度为2m 的序列.对于一个友谊颗 粒的序列,如果存在1 ...

  8. [JZOJ5410]【NOIP2017提高A组集训10.22】小型耀斑 (口胡)

    Description Uthuso 的核反应失控了,她在地灵殿释放了几颗大核弹.地灵殿可以看做一个大小为n*m 的矩阵.一颗大小为k 的核弹,对于任意一个与爆炸中心曼哈顿距离小于k 的地区,会造成( ...

  9. 【NOIP2017提高A组集训10.22】友谊

    Description Flowey 是一朵能够通过友谊颗粒传播LOVE 的小花.它的友谊颗粒分为两种, 圆粒的和皱粒的,它们依次排列组成了一个长度为2m 的序列.对于一个友谊颗 粒的序列,如果存在1 ...

最新文章

  1. 阿里总监辞职回家创业,年利润千万让人羡慕
  2. 分享一百多套开发视频教程的下载地址(转)
  3. spring boot创建应用 端口冲突8080
  4. 顺序二叉树(基于数组存储树结点)
  5. 你真的了解引用传递与值传递吗?
  6. 腾讯、火绒回应“QQ 读取浏览器历史记录”;字节跳动起诉百度获赔 40 元;Redis 6.0.10 发布 | 极客头条...
  7. 在5G、大数据、AI领域进行合作,商飞与腾讯云共推大飞机智能制造
  8. 使用CXF实现Webservice的服务接口提供以及相关的客户端实现
  9. python正则表达式模块re
  10. Ubuntu 20:Cadence IC615集成HSPICE
  11. 网络安全常用标准汇总
  12. 致远OA表单自定义函数(明细表排名 )
  13. python3爬虫有道翻译_【Python3爬虫】有道翻译
  14. ioi 赛制_编程大神IOI2019国家队第二名是什么概念?全球知名算法竞赛网站列中国选手第二名!...
  15. 【独立后台】2021全新最火表情包小程序源码,无限裂变,斗图小程序,头像壁纸,外卖服务内附详细搭建教程
  16. 点餐App火爆背后的冷思考
  17. blender中的灯光和相机
  18. linux秘钥对生成器,linux – GPG密钥生成器*不*使用熵
  19. ktor启动报错:Module function cannot be found for the fully qualified name 'ApplicationKt.module'
  20. GLUT的下载与安装

热门文章

  1. c++学习笔记之构造函数
  2. 远程唤醒linux系统方法
  3. CentOS下的rm命令改造成移动文件至回收站
  4. 【Python】append和extend的区别
  5. 科大星云诗社动态20220111
  6. 科大星云诗社动态20210522
  7. 检查文件上传完成_“我的数据上传NCBI又报错了...” “攻略拿去!”
  8. 怎么把网页源码家入hexo博客_一款被大厂选用的 Hexo 博客主题
  9. [OS复习]虚拟存储管理技术2
  10. 实验二 二叉树的操作与实现