Description

Solution

把输入的 \(n\) 个二进制数看作一个大小为 \(n*m\) 的矩阵
把每一列压成一个二进制数,其中最高位是最下面的元素
然后就有了 \(m\) 个二进制数 \(b_i\),然后逐位考虑

我们把操作序列也变成一个二进制数 \(x\),\(1\) 为 \(\&\),\(0\) 为 \(|\)
那么第 \(i\) 位最后的结果为 \(1\) 当且仅当 \(x<b_i\) (注意最高位是最下面的元素)

然后就是确定 \(x\) 的取值范围了
如果我们把 \(b\) 数组从大到小排序,如果确定了 \(x\) ,那么就相当与把 \(b\) 从某个地方断开,前面的二进制位变成 \(1\),后面的变成 \(0\)

考虑每一个询问: \(r_i\)
首先满足条件的情况一定是:在 \(b\) 数组中,\(r\) 中所有的 \(1\) 位都在 \(0\) 位前面

找到断点 \(i\) 之后,答案就是 \(b[i-1]-b[i]\) 了

#include<bits/stdc++.h>
using namespace std;
const int N=5010,mod=1000000007;
int n,m,Q,p[N];char s[N];
struct data{bool b[1010];int id;inline bool operator <(const data &p)const{for(int i=n;i>=1;i--)if(b[i]!=p.b[i])return b[i]>p.b[i];return id<p.id;}
}a[N];
bool w[N];
inline int putans(int x){int ret=0,t=0;for(int i=n;i>=1;i--)ret=(1ll*ret*2+a[x-1].b[i])%mod;for(int i=n;i>=1;i--)t=(1ll*t*2+a[x].b[i])%mod;ret=(ret-t+mod)%mod;return ret+(x==1);
}
int main(){freopen("hunt.in","r",stdin);freopen("hunt.out","w",stdout);cin>>n>>m>>Q;for(int i=1;i<=n;i++){scanf("%s",s+1);for(int j=1;j<=m;j++)a[j].b[i]=s[j]-'0';}for(int i=1;i<=m;i++)a[i].id=i;sort(a+1,a+m+1);for(int i=1;i<=m;i++)p[a[i].id]=i;for(int i=1;i<=n;i++)a[0].b[i]=1;while(Q--){scanf("%s",s+1);for(int i=1;i<=m;i++)w[p[i]]=s[i]-'0';bool t=0,flag=0;for(int i=1;i<=m;i++){if(t && w[i]){flag=1;break;}t=w[i]^1;}if(flag)puts("0");else{for(int i=1;i<=m+1;i++){if(w[i]==0){printf("%d\n",putans(i));break;}}}}return 0;
}

转载于:https://www.cnblogs.com/Yuzao/p/8872820.html

bzoj 5285: [Hnoi2018]寻宝游戏相关推荐

  1. [bzoj5285][Hnoi2018]寻宝游戏【复杂度分析】

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5285 [题解] 考虑最后一个影响一个二进制位的数. 如果出现"&0 ...

  2. BZOJ 3991: [SDOI2015]寻宝游戏

    随便选一个点当做根,跑每个点的深度(为了求LCA)d [ u ] ,和到根节点的距离(为了更新答案) l [ u ] 我们发现,由关键点和他们的LCA构成的虚树(其实就是忽略其他节点),由于还要回到原 ...

  3. HNOI2018寻宝游戏

    https://www.luogu.org/problemnew/show/P4424 题解 我们首先按位考虑. 如果有一位最终的结果为1,那么我们可以把树的序列看成一个二进制数,先出现的在底位,后出 ...

  4. 【BZOJ 3991】 [SDOI2015]寻宝游戏

    3991: [SDOI2015]寻宝游戏 Time Limit: 40 Sec Memory Limit: 128 MB Submit: 251 Solved: 137 [Submit][Status ...

  5. SDOI2015寻宝游戏 dfs序+set

    SDOI2015寻宝游戏 好像是一道虚树入门题? 虚树???不会不会我弱死了.. Solution: 关键点间的最小路径,就是在保证尽量少走重复路的前提下走出来的一条经过所有关键点的路径. 基于这个思 ...

  6. 河北工业大学c语言寻宝游戏,计算机技术基础(c语言)课程设计寻宝游戏.doc

    计算机技术基础(c语言)课程设计寻宝游戏 计算机技术基础(c语言)课程设计 寻宝游戏 #include #include #include #include #include #define ESC ...

  7. hdu 6289 寻宝游戏

    寻宝游戏 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Sub ...

  8. 寻宝游戏 - 利用iBeacon特性设计的iOS线下寻宝游戏 - 物联网小游戏

    寻宝游戏 - 利用iBeacon特性设计的iOS线下寻宝游戏 作者简介 科科香,程序员 方向:IoT,方案集成,喜好各种新鲜东东 转载请注明出处 iBeacon简介 iBeacon(下面简称Beaco ...

  9. minecraft_使用MCDungeon将地牢,废墟和寻宝游戏添加到您的Minecraft世界中

    minecraft If you've grown tired of exploring the vanilla Minecraft world and the thrill of stumbling ...

最新文章

  1. 学Java需要用到的软件快收藏!
  2. 使用Leangoo管理产品Backlog
  3. 使用ViewPager加载页面出现空白
  4. 蓝桥杯-Anagrams问题(java)
  5. 从线上慢sql看explain关键字
  6. 零基础入门stm32需要学这些东西
  7. 2019运管取消了滴滴还查吗_劳务资质2019年取消吗?劳务资质新标准你真的了解吗?...
  8. 怎样取消shutdown关机命令?-shutdown命令的使用解析
  9. 远程桌面——TeamViewer中“显示黑屏”的功能框无法使用
  10. 服务器查看数据库日志文件,服务器数据库查看日志文件
  11. bae3.0第三步 添加默认管理后台模块和mysql库
  12. 高数篇(二)-- 傅里叶变换 VS 拉普拉斯变换
  13. socket.io实现简单多人聊天室
  14. 读取日志时发生乱码的解决方法
  15. 三种 绘制奈奎斯特曲线 的方法
  16. 前端打开.chm文件
  17. minigui之显示gif
  18. 京东2021年618项目规划——附下载
  19. 【MySQL】数据库连接池的原理及实现
  20. 计算机网络与通信实验报告——HTTP协议分析

热门文章

  1. 技术人生:真的要注意身体了,坚持锻炼
  2. Mathematica求解不定积分与定积分
  3. 生信自学笔记(五)计分矩阵的实例
  4. 基于ssm的进销存系统
  5. 通过netsh一键连接指定WIFI
  6. 后羿采集器怎么导出数据_后羿采集器教程:如何采集东方财富网股票数据
  7. 华为手机摄影从入门到精通_华为手机拍照技巧从入门到精通
  8. 齐岳提供AIE分子N-苄基-4-溴-1, 8-蔡酰亚胺,近红外发射的BODIPY-PhOSi和BODIPY-DMA,超分子聚合物PNA-GBP·I2的合成
  9. 10激活网页被劫持_新手学习SEO需掌握的10大SEO技能
  10. STM32的BootLoader 从SD卡更新固件