Description:

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

Hint:

\(n<=1000,m<=5000,q<=1000\)

Solution:

按位考虑

把这些串按位拆成m个长为n的串

发现只有\(|1\)和\(\&0\)会改变答案

且每一位最终为1的充要条件是最后一个\(|1\)在\(\&0\)后

为0则反之

再将操作序列也看成01串

\(|\)为\(0,\&\)为\(1\),

则问题转化为原串与操作串的字典序大小关系

每次找到操作串的上界和下界,相减便是答案

#include<bits/stdc++.h>
using namespace std;
const int mxn=5e3+5,mod=1e9+7;
int n,m,q;
int t[mxn][mxn],s[mxn],rk[mxn],p[mxn];
char c[mxn]; int cmp(int a,int b)
{
for(int i=1;i<=n;++i)
if(t[a][i]!=t[b][i]) return t[a][i]<t[b][i];
return 0;
} void init()
{
p[0]=1;
for(int i=1;i<=mxn-5;++i) p[i]=1ll*p[i-1]*2%mod;
for(int i=1;i<=m;++i) reverse(t[i]+1,t[i]+n+1);
for(int i=1;i<=m;++i) rk[i]=i;
sort(rk+1,rk+m+1,cmp);
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
s[i]=(s[i]+1ll*t[rk[i]][j]*p[n-j])%mod; //预处理,按字典序排序后每次能按顺序扫
s[m+1]=p[n];
} void solve()
{
for(int i=1;i<=q;++i) {
scanf("%s",c+1);
int st=0,ed=m+1;
for(int i=m;i>=1;--i) if(c[rk[i]]=='0') {st=i;break;}
for(int i=1;i<=m;++i) if(c[rk[i]]=='1') {ed=i;break;} //找上下界
printf("%d\n",ed>=st?(s[ed]-s[st]+mod)%mod:0);
}
} int main()
{
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;++i) {
scanf("%s",c+1);
for(int j=1;j<=m;++j)
t[j][i]=c[j]-'0';
}
init();
solve();
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. HNOI2018寻宝游戏

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

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

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

  7. 【比赛】HNOI2018 寻宝游戏

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

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

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

  9. 【题解】HNOI2018寻宝游戏

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

随机推荐

  1. AI-restful接口写法

    AI-restful接口写法 restful接口规范 http协议请求方式:GET POST DELETE PUT PATCH OPTION HEAD 设计接口时必须使用这种格式的数据 GET 查看数 ...

  2. CentOS安装jdk的三种方法

    方法一:手动解压JDK的压缩包,然后设置环境变量 方法二:用yum安装JDK,(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的 ...

  3. WBXML 1.3协议摘要

    协议地址:WAP195   网络字节顺序:big-endian.   为什么要加0x40? 参考:Compressing XML When an element contains content (t ...

  4. IDEA拷贝操作

    另外一种添加方式

  5. Django系列(一)

    项目引入静态文件 更改settings.py,为项目下面的每个APP应用,建立静态文件,这里如blog,首先在blog下面建立一个静态文件夹名为statics,注意这里为别名 STATICFILES_ ...

  6. C#Enum用Tuple保存值绑定到前端的CheckBox

    //把数字转成枚举 public static T[] NumStringsToEnums<T>(string enumNumString ) //where T:Enum { if (s ...

  7. asp.net core MVC 控制器,接收参数,数据绑定

    1.参数 HttpRequest HttpRequest 是用户请求对象 QueryString Form Cookie Session Header 实例: public IActionResult ...

  8. WCF 非http寄宿IIS

    摘要 从IIS 7 开始, IIS增加了对非HTTP协议的支持. 因此, 自IIS 7之后, 可以将NetTcpBinding等非HTTP协议的Bindings直接寄宿在IIS上面. 本文将介绍如何在 ...

  9. 执行Spark运行在yarn上的命令报错 spark-shell --master yarn-client

    1.执行Spark运行在yarn上的命令报错 spark-shell --master yarn-client,错误如下所示: // :: ERROR SparkContext: Error init ...

  10. [转] 梦里Babel知多少(一)

    平时开发中,经常需要用到ES6/ES7的语法.那么就需要用到Babel来对代码进行转码处理. 之前用Vue比较多,所以以Vue-cli作为参考来分析.  第一张图是几个月前的Vue-cli生成的 第二 ...