https://www.luogu.org/problemnew/show/P4424

题解

我们首先按位考虑。

如果有一位最终的结果为1,那么我们可以把树的序列看成一个二进制数,先出现的在底位,后出现的在高位,操作序列也可以看做一个二进制数,\(and\)为1,\(or\)为0,先出现的在低位,后出现的在高位。

首先操作序列是不可能把0变成1的,那么要使最后的结果为1,就得考虑数字序列最高位的1,那么如果操作序列的更高位有1,结果肯定会变成0,否则如果操作序列这一位不是1,那么结果肯定是1。

如果这两种情况都不是,那么说明这一位操作序列和数字序列都是1,这时就得往低位继续判断。

如此归纳下去,如果需要满足这一位为1,必须要求数字序列>操作序列。

再考虑多位的情况,相当于是有很多的限制。

这样我们就会得到一个性质,合法的序列是一段连续的二进制数。

我们直接把所有序列拍完序后对每个询问暴力扫就好了。

注意边界!!!!

代码

#include<bits/stdc++.h>
#define N 5009
#define M 1009
using namespace std;
typedef long long ll;
const int mod=1000000007;
char s[N];
int n,m,q,rnk[N];
ll ji[N],cnt[N];
inline void MOD(ll &x){x=x>=mod?x-mod:x;}
inline ll rd(){
ll x=0;char c=getchar();bool f=0;
while(!isdigit(c)){if(c=='-')f=1;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return f?-x:x;
}
struct skr{
int a[M],id;
inline bool operator <(const skr &b)const{
for(int i=1;i<=n;++i)if(a[i]!=b.a[i])return a[i]>b.a[i];
return 0;
}
}a[N];
int main(){
n=rd();m=rd();q=rd();
ji[0]=1;
for(int i=1;i<=n;++i)ji[i]=ji[i-1]*2%mod;
for(int i=1;i<=n;++i){
scanf("%s",s+1);
for(int j=1;j<=m;++j){
a[j].a[n-i+1]=s[j]^48;
}
}
for(int i=1;i<=m;++i)a[i].id=i;
sort(a+1,a+m+1);
for(int i=1;i<=m;++i)rnk[a[i].id]=i;
for(int i=1;i<=m;++i)for(int j=1;j<=n;++j)if(a[i].a[j])MOD(cnt[i]+=ji[n-j]);
for(int j=1;j<=n;++j)MOD(cnt[0]+=ji[n-j]);MOD(cnt[0]+=1);
while(q--){
scanf("%s",s+1);
int L=m+1,R=0;
for(int i=1;i<=m;++i)
if(s[i]=='1')R=max(R,rnk[i]);
else L=min(L,rnk[i]);
if(R>L)puts("0");
else printf("%lld\n",(cnt[R]-cnt[L]+mod)%mod);
}
return 0;
}

HNOI2018寻宝游戏的更多相关文章

  1. 【BZOJ5285】[HNOI2018]寻宝游戏(神仙题)

    [BZOJ5285][HNOI2018]寻宝游戏(神仙题) 题面 BZOJ 洛谷 题解 既然是二进制按位的运算,显然按位考虑. 发现这样一个关系,如果是\(or\)的话,只要\(or\ 1\),那么无 ...

  2. 5285: [Hnoi2018]寻宝游戏

    5285: [Hnoi2018]寻宝游戏 链接 分析: 从下面依次确定运算符号,然后在确定的过程中,需要确定的位数会逐渐减少.比如最后有一个1,如果在从下往上确定了一个or 1,那么再往前可以随便选了 ...

  3. BZOJ.5285.[AHOI/HNOI2018]寻宝游戏(思路 按位计算 基数排序..)

    BZOJ LOJ 洛谷 话说vae去年的专辑就叫寻宝游戏诶 只有我去搜Mystery Hunt和infinite corridor了吗... 同样按位考虑,假设\(m=1\). 我们要在一堆\(01\ ...

  4. bzoj 5285: [Hnoi2018]寻宝游戏

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

  5. bzoj千题计划310:bzoj5285: [Hnoi2018]寻宝游戏(思维题+哈希)

    https://www.lydsy.com/JudgeOnline/problem.php?id=5285 |0 和 &1 没有影响 若填‘|’,记为0,若填‘&’,记为1 先只考虑最 ...

  6. [HNOI2018]寻宝游戏

    Description: 给出\(n\)个长为\(m\)的01串,第0个为0,同时给出\(q\)个询问串,每次向其中添加\(n\)个\(\&\)或\(|\)符号,求使这些串按顺序运算得到询问串 ...

  7. 【比赛】HNOI2018 寻宝游戏

    考试的时候就拿了30points滚粗了 听说myy对这题的倒推做法很无奈,官方题解在此 正解思路真的很巧妙,也说的很清楚了 就是分别考虑每一位,会发现题解中的那个性质,然后把询问的二进制数按照排序后的 ...

  8. [HNOI2018]寻宝游戏(题解转载自别处)

    题解(自别处转载): Luogu CSDN 这题关键是将运算符也替换成0,1 然后在运算符与原串混杂里找规律. 而且替换的方式也有所要求,考场上两种替换方式都要尝试. #include <bit ...

  9. 【题解】HNOI2018寻宝游戏

    太厉害啦……感觉看到了正解之后整个人都惊呆了一样.真的很强%%% 首先要注意到一个性质.位运算列与列之间是不会相互影响的,那么我们先观察使一列满足条件的操作序列需要满足什么条件.&0时,不论之 ...

随机推荐

  1. Spring RestTemplate详解

    Spring RestTemplate详解   1.什么是REST? REST(RepresentationalState Transfer)是Roy Fielding 提出的一个描述互联系统架构风格 ...

  2. Asp.Net 将HTML中通过dom-to-image.js标签div内的内容转化为图片保存到本地

    由于客户的需求,将js写出来的一个统计能够保存到本地.作为码奴的我只能慢慢搬砖咯!一开始使用的是html2canvas.js.功能是可以实现,但是有缺陷.话不多说开始搞! 1.引入几个JS库 ①:jq ...

  3. js 百度地图定位

    //百度 layer.msg('正在定位,请稍后'); var geolocation = new BMap.Geolocation({ enableHighAccuracy: true, //是否使 ...

  4. 碰到了通过Movie显示gif图片,有部分图片的duration为0导致gif只显示第一帧

    解决办法,改为使用android-gif-drawable.jar来显示gif图片(需要配合com.android.support:support-v4:18.0.0使用) GifImageView ...

  5. 好代码是管出来的——使用GitHub实现简单的CI/CD

    软件开发一般来说是一项团队作业,在本系列文章开始就提到过软件的编码是由一个团队“并行”完成的,为了保证编码任务正常完成,首先引入版本控制工具来完成代码管理,为了保证代码质量引入了代码分析器以及代码测试 ...

  6. python使用rabbitMQ介绍三(发布订阅模式)

    一.模式介绍 在前面的例子中,消息直接发送到queue中. 现在介绍的模式,消息发送到exchange中,消费者把队列绑定到exchange上. 发布-订阅模式是把消息广播到每个消费者,每个消费者接收 ...

  7. HashMap源码分析(一)

    前言:相信不管在生产过程中还是面试过程中,HashMap出现的几率都非常的大,因此有必要对其源码进行分析,但要注意的是jdk1.8对HashMap进行了大量的优化,因此笔者会根据不同版本对HashMa ...

  8. 《你必须掌握的Entity Framework 6.x与Core 2.0》勘误

    第5章 5.1.1----致谢网友[宪煌] public virtual ICollection Post {get;set;} 修改为 public virtual ICollection<P ...

  9. 类Scanner

    什么是Scanner类 一个可以解析基本类型和字符串的简单文本扫描器. 引用类型使用步骤 1:导包:使用import关键字导包,在类的所有代码之前导包,引入要使用的类型. java.lang包下的所有 ...

  10. jQuery手机端点击弹出分享按钮代码

    一.HTML代码如下: <span onClick="toshare()" style="border:dotted 1px #ddd;display:block; ...