Description

题库链接

给出 \(n\) 个 \(m\) 位的二进制数,在每一个二进制数间插入一个 &| ,第 \(0\) 个数为 \(0\) , \(0,1\) 间也要插入符号,共插入 \(n\) 个符号。

给出 \(q\) 组询问,每组询问也给出一个二进制数,询问有多少种方式使得从左至右运算后结果为该数。

\(1\leq n\leq 1000,1\leq m\leq 5000,1\leq q\leq 1000\)

Solution

人类智慧题。

我们可以把每一位单独拿出来处理,将每一位压成一个 \(n\) 位的二进制数,第 \(i\) 位为 \(a_i\) 。越靠右位数越高。

我们对于生成的符号序列,将 & 记为 \(1\) , 将 | 记为 \(0\) 。同样越靠右位数越高。记为 \(x\) 。

考验人类智慧的就是,有这样一个结论:若第 \(i\) 位运算结果为 \(1\) ,当且仅当 \(x<a_i\) 。这个可以感性理解一下,比较直观。

那么我们考虑将 \(a_i\) 从大到小排序,我们只需找到这样的唯一一个断点,满足断点以左的 \(a_i\) 对应的那一位均为 \(1\) ,断点以右的均为 \(0\) 。

假设断点右边一位为 \(loc\) ,那么答案就是 \(a_{loc-1}-a_{loc}\) 。如果没有断点,显然无解。

Code

#include <bits/stdc++.h>
using namespace std;
const int N = 1000+5, M = 5000+5, yzh = 1000000007; int n, m, q, mp[M], cg[M];
char ch[M];
struct tt {
int b[N], id;
bool operator < (const tt &c) const {
for (int i = n; i >= 1; i--)
if (b[i] != c.b[i]) return b[i] > c.b[i];
}
}a[M]; int get_ans(int o) {
int x = 0, y = 0;
for (int i = n; i >= 1; i--) x = (2ll*x%yzh+a[o-1].b[i])%yzh;
for (int i = n; i >= 1; i--) y = (2ll*y%yzh+a[o].b[i])%yzh;
return ((x-y+(o == 1))%yzh+yzh)%yzh;
}
void work() {
scanf("%d%d%d", &n, &m, &q);
for (int i = 1; i <= n; i++) {
scanf("%s", ch+1);
for (int j = 1; j <= m; j++) a[j].b[i] = ch[j]-'0';
a[0].b[i] = 1;
}
for (int i = 1; i <= m; i++) a[i].id = i;
sort(a+1, a+m+1);
for (int i = 1; i <= m; i++) mp[a[i].id] = i;
while (q--) {
scanf("%s", ch+1);
for (int i = 1; i <= m; i++) cg[mp[i]] = ch[i]-'0';
int flag = 0, t = 0;
for (int i = 1; i <= m; i++) {
if (cg[i] && t) {flag = 1; break; }
if (cg[i] == 0) t = 1;
}
if (flag) puts("0");
else {
int flag = 0;
for (int i = 1; i <= m; i++)
if (cg[i] == 0) {printf("%d\n", get_ans(i)); flag = 1; break; }
if (!flag) printf("%d\n", get_ans(m+1));
}
}
}
int main() {work(); return 0; }

[HNOI 2018]寻宝游戏的更多相关文章

  1. [Bzoj5285][洛谷P4424][HNOI/AHOI2018]寻宝游戏(bitset)

    P4424 [HNOI/AHOI2018]寻宝游戏 某大学每年都会有一次Mystery Hunt的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新生 ...

  2. 【HNOI 2018】游戏

    Problem Description 一次小 \(G\) 和小 \(H\) 在玩寻宝游戏,有 \(n\) 个房间排成一列,编号为 \(1,2,-,n\),相邻房间之间都有 \(1\) 道门.其中一部 ...

  3. 洛谷P4424 [HNOI/AHOI2018]寻宝游戏(思维题)

    题意 题目链接 Sol 神仙题Orz Orz zbq爆搜70.. 考虑"与"和"或"的性质 \(0 \& 0 = 0, 1 \& 0 = 0\) ...

  4. BZOJ5285 & 洛谷4424 & UOJ384:[HNOI/AHOI2018]寻宝游戏——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5285 https://www.luogu.org/problemnew/show/P4424 ht ...

  5. [HNOI/AHOI2018]寻宝游戏

    题目大意: $n(n\le1000)$个$m(m\le5000)$位的二进制数,第$0$个数为$0$.用$\wedge$和$\vee$将这些数连接起来.$q(q\le1000)$次询问,每次给定一个$ ...

  6. 【洛谷4424】[HNOI/AHOI2018] 寻宝游戏(位运算思维题)

    点此看题面 大致题意: 给你\(n\)个\(m\)位二进制数.每组询问给你一个\(m\)位二进制数,要求你从\(0\)开始,依次对于这\(n\)个数进行\(and\)或\(or\)操作,问有多少种方案 ...

  7. P3320 [SDOI2015]寻宝游戏 解题报告

    P3320 [SDOI2015]寻宝游戏 题目描述 小B最近正在玩一个寻宝游戏,这个游戏的地图中有\(N\)个村庄和\(N-1\)条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以 ...

  8. [BZOJ3991][SDOI2015]寻宝游戏

    [BZOJ3991][SDOI2015]寻宝游戏 试题描述 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择 ...

  9. 【BZOJ】【3991】【SDOI2015】寻宝游戏

    dfs序 我哭啊……这题在考试的时候(我不是山东的,CH大法吼)没想出来……只写了50分的暴力QAQ 而且苦逼的写的比正解还长……我骗点分容易吗QAQ 骗分做法: 1.$n,m\leq 1000$: ...

随机推荐

  1. 第1章 敏捷思维—“互联网+”知识工作者必备的DNA

    1.1  强化敏捷思维,落实“十三五”双创战略 史蒂夫·布兰克观察美国创业环境,提出创新生态四个方面:动机.管理工具.文化.基础建设,开创LLP创新创业模式. 1.2  现代敏捷管理发展趋势 1.敏捷 ...

  2. SVG系列教程:SVG简介与嵌入HTML页面的方式

    地址:http://www.w3cplus.com/html5/svg-introduction-and-embedded-html-page.html 随着技术向前的推进,SVG相关的讨论也越渐频繁 ...

  3. jvm linux 时区设置

    # 背景 在接入集团一个平台的时候,发现录制某个接口到测试环境回放,发现接口入参一致,一个start_day 一个end_day,但回放的时候会多调用一次数据库查询,很是奇怪: 查阅业务代码,发现确实 ...

  4. Content-Disposition 响应头,设置文件在浏览器打开还是下载

    Content-Disposition属性有两种类型:inline 和 attachment inline :将文件内容直接显示在页面 attachment:弹出对话框让用户下载 code: cont ...

  5. 基于EasyUi的datagrid合并单元格JS写法

    $('#dg').datagrid({ width: 'auto', height: 'auto', scrollbarSize: , queryParams: {}, url: 'kkkk', co ...

  6. 网易云首席安全架构师谈安全新形势:DDOS两三天,游戏玩家数从几万降到几百

    本文由  网易云发布. 安全是一个永恒的话题,在业务不断云化.攻击越来越复杂的当下,互联网安全呈现了出什么样的严峻形势?对这些形势,网易云又是如何应对的? 网易云首席安全架构师沈明星 4月13日,网易 ...

  7. python 模块导入全局变量

    在哪种情况下需要从模块导入全局变量 项目里多个脚本均更改「某一个全局变量」时 全量变量需要实现可配置时 从模块导入全局变量的方法 from test_prokject import global_va ...

  8. Zookeeper之Curator(1)客户端基本的创建,删除,更新,查找操作api

    Curator Framework提供了简化使用zookeeper更高级的API接口.它包涵很多优秀的特性,主要包括以下三点: 自动连接管理:自动处理zookeeper的连接和重试存在一些潜在的问题: ...

  9. net.sf.json.JSONOBJECT.fromObject 与 com.alibaba.fastjson.JSONObject.parseObject

    文章待补充,先写写以下知识点好了. NULL值处理之 net.sf.json.JSONObject 和 com.alibaba.fastjson.JSONObject区别 JSON作为一个轻量级的文本 ...

  10. leetcode-165-比较版本号

    题目描述: 比较两个版本号 version1 和 version2.如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此 ...