题目

题目描述
ZYB是一名资深特级OI教师。在他的题库里,一共有M道判断题。现在,他正在教授N名OI选手,作为一名特级教师,他一眼就看出了每个学生对每道问题的答案是YES还是NO.

现在他希望出一场堂测,他会选择这些判断题当中的一个非空子集(2M−1种可能)。他希望这场堂测能有一些区分度。定义一道题目有区分度,当且仅当至少有一个学生回答YES,并且至少有一个学生回答NO,而一场堂测有区分度,当且仅当所有的题目都是有区分度的。

然而,这些学生有可能会咕咕咕。每个学生只有50%的可能出现在这堂课上进行堂测。现在ZYB想知道,对于每个不同的子集,有多大的概率这场堂测是有区分度的呢?

为了方便起见,假设这2M−1个概率分别是Ans1,Ans2,…,Ans2M−1,你只需要输出(Ans1×2Nmod998244353)xor(Ans2×2Nmod998244353)xor…xor(Ans2M−1×2Nmod998244353)的值.

输入格式
第一行两个整数n,m.

接下来n行,每行一个长度为m的01字符串,其中第i位为1表示该学生对这个问题回答YES,0表示回答NO.

输出格式
一行输出所求值。

样例1
输入

2 2
01
10
输出

1
解释 对于每道题目,当且仅当所有人都到时才有区分度.故Ans1=Ans2=Ans3=1/4,带入可知是1.

样例2
输入

4 2
00
01
10
11
输出

7
解释 对于第一题,当只有1,2或只有3,4到时是没区分度的,所以可能性是(16-7)/16,第二题也是如此.

若需要两题都有区分度,则需要1,4同时到或2,3同时到,则(1,4),(2,3)以及任意超过3个人到都是合法解。可能性为7/16.

于是,答案为9 xor 9 xor 7=7

数据范围
对于30%的数据,M≤4.

对于60%的数据,M≤10.

对于100%的数据,N≤100000,M≤15

思路

我们考虑设fSf_SfS​表示SSS里面的这些题目都有区分度的方案数。

那么我们可以知道fS=∑S′⊂S(−1)∣S′∣GS′f_S=\sum_{S' \sub S} (-1)^{|S'|}G_{S'}fS​=∑S′⊂S​(−1)∣S′∣GS′​,其中S′S'S′是SSS的一个 子集,而gSg_SgS​的含义是有多少种方案使得SSS中的所有题都没有区分度.

最后我们考虑如何计算gSg_SgS​。我们设计一个hSh_ShS​,SSS是一个长度为mmm的三进制数,如果第iii位为222表示这一位无所谓,然后如果 这一位为0/10/10/1则表示这一位选择0/10/10/1的数的个数. 设S′S'S′是SSS中不为222的位置集合,则gS′+=2hS−1g_{S'} += 2^{h_S} −1gS′​+=2hS​−1,最后再给每个gSg_SgS​加上空集就行。

如何计算hSh_ShS​?如果SSS中没有222,则可以直接算出来,否则我们随便找一个222,将这个222分别变成0/10/10/1得到S′S'S′,S′′S′′S′′,hS=hS′+hS′′h_S = h_{S′} + h_{S′′}hS​=hS′​+hS′′​,按照0+10 + 10+1的个数从小往大枚举就 行,两步的复杂度都是O(3M)O(3^M)O(3M),总复杂度为O(3M+NM)O(3^M + NM)O(3M+NM)

代码

#include<bits/stdc++.h>
#define N 300005
#define Mo 998244353
using namespace std;int f[15000005],n,pw3[N],pw2[N],g[1<<15],m,size[N],Cas;char c[N];void dfs(int u,int _2,int _3,int _4)
{if (u==m){if (_4!=-1)f[_3]=f[_3-pw3[m-1-_4]]+f[_3-2*pw3[m-1-_4]];(g[_2]+=pw2[f[_3]]-1)%=Mo;}else{dfs(u+1,(_2<<1)+1,_3*3,_4);dfs(u+1,(_2<<1)+1,_3*3+1,_4);dfs(u+1,(_2<<1),_3*3+2,u);}
}int main()
{pw2[0]=1; for(int i=1; i<N;++i) pw2[i]=pw2[i-1]*2%Mo;for(int i=1; i<(1<<15);++i) size[i]=size[i/2]+(i&1); pw3[0]=1; for(int i=1; i<20;++i) pw3[i]=pw3[i-1]*3;scanf("%d%d",&n,&m);for(int i=1; i<=n;++i){scanf("%s",c); int tmp=0;for(int j=0;j<m;++j)  tmp=tmp*3+(c[j]=='1');f[tmp]++;}dfs(0,0,0,-1); int yjy=0;for(int i=0; i<(1<<m);++i) (g[i]+=1)%=Mo;for(int i=1; i<(1<<m);++i){int tmp=0;for(int j=i;;j=(j-1)&i){if (size[j]&1) tmp=(tmp-g[j]+Mo)%Mo;else tmp=(tmp+g[j])%Mo;if (!j) break;}yjy^=tmp;}printf("%d\n",yjy);
}

【noi.ac #1759】ZYB的测验计划相关推荐

  1. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  2. NOI.AC#2007-light【根号分治】

    正题 题目链接:http://noi.ac/problem/2007 题目大意 nnn个格子排成一排,每个格子有一个0/10/10/1和一个颜色.开始每个格子都是000,qqq次操作取反一个颜色的所有 ...

  3. NOI.AC#2139-选择【斜率优化dp,树状数组】

    正题 题目链接:http://noi.ac/problem/2139 题目大意 给出nnn个数字的序列aia_iai​.然后选出一个不降子序列最大化子序列的aia_iai​和减去没有任何一个数被选中的 ...

  4. NOI.AC#2144-子串【SAM,倍增】

    正题 题目链接:http://noi.ac/problem/2144 题目大意 给出一个字符串sss和一个序列aaa.将字符串sss的所有本质不同子串降序排序后,求有多少个区间[l,r][l,r][l ...

  5. NOI.AC#2266-Bacteria【根号分治,倍增】

    正题 题目链接:http://noi.ac/problem/2266 题目大意 给出nnn个点的一棵树,有一些边上有中转站(边长度为222,中间有一个中转站),否则就是边长为111. mmm次询问一个 ...

  6. 野鸡NOI.AC模拟赛【2019.10.26】

    前言 截止至2019.10.2614:222019.10.26\ \ \ \ 14:222019.10.26    14:22 成绩 正题 T1:NOI.AC−T1:NOI.AC-T1:NOI.AC− ...

  7. noi.ac 405 bzoj 4403 序列统计 题解

    博客观赏效果更佳 题意简述 noi.ac再次蒯题,实锤了- 请你求长度在 [ 1 , n ] [1,n] [1,n] 范围内,值域在 [ l , r ] [l,r] [l,r] 范围内的序列中,不下降 ...

  8. @noi.ac - 488@ cleaner

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 小Q计划在自己的新家中购置一台圆形的扫地机器人.小Q的家中有一个 ...

  9. noi.ac #543 商店

    我们考虑可并堆维护,从深到浅贪心选取. 用priority_queue启发式合并的话,是60pts: #include<iostream> #include<cstdio> # ...

  10. NOI.5.22津津的储蓄计划

    描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同. 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到 ...

最新文章

  1. 力扣(LeetCode)刷题,简单+中等题(第34期)
  2. NOD32: 教育网、公网超级 病毒更新服务器
  3. 存储虚拟化之带内设备与基于存储控制器的虚拟化
  4. NASA WorldWind1.4.0源代码调试总结
  5. java 流常用接口_java 8新特性5--使用集合流式API
  6. sans webcast
  7. TensorFlow中数据的feed与fetch
  8. (6)二进制文件方式部署Kubernetes高可用集群----------安装Docker Engine
  9. win10字体大小_暴露年龄警告!Win10干掉了多少装机必备?
  10. 黑苹果固态硬盘_苹果SSD固态硬盘不完全详解
  11. 【软技能】完全写作指南--评论
  12. 手写RPC(五) 核心模块网络协议模块编写 ---- 自定义协议
  13. 黑客社会工程学攻击的八种常用伎俩
  14. 推荐系统应用---新闻资讯类
  15. 测试IP和端口是否通
  16. 计算机看不了pdf,电脑桌面变成pdf打不开怎么办
  17. r720服务器系统安装u盘,服务器r720设置u盘启动
  18. 《网络渗透检测第一章 信息收集》
  19. 如何判断自己的电脑适合装什么系统?
  20. List<String,Object>针对于集合中Map某个属性值求和

热门文章

  1. TCP/IP路由技术第一卷动态路由知识回顾
  2. ChromeFK插件推荐系列九:PDF插件推荐
  3. Java实现 LeetCode 108 将有序数组转换为二叉搜索树
  4. 使用 tf.nn.dynamic_rnn 展开时间维度
  5. 如何配置一个高效的 Mac 工作环境
  6. Mac版 Pycharm 查看内建函数的源码
  7. 【链环科技】微信公众号商城开发优势
  8. Qt之Q_PROPERTY(新)
  9. 网站采集器-免费任意网页数据采集器
  10. 淘宝获取商品历史价格API