[HNOI 2018]寻宝游戏
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]寻宝游戏的更多相关文章
- [Bzoj5285][洛谷P4424][HNOI/AHOI2018]寻宝游戏(bitset)
P4424 [HNOI/AHOI2018]寻宝游戏 某大学每年都会有一次Mystery Hunt的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新生 ...
- 【HNOI 2018】游戏
Problem Description 一次小 \(G\) 和小 \(H\) 在玩寻宝游戏,有 \(n\) 个房间排成一列,编号为 \(1,2,-,n\),相邻房间之间都有 \(1\) 道门.其中一部 ...
- 洛谷P4424 [HNOI/AHOI2018]寻宝游戏(思维题)
题意 题目链接 Sol 神仙题Orz Orz zbq爆搜70.. 考虑"与"和"或"的性质 \(0 \& 0 = 0, 1 \& 0 = 0\) ...
- BZOJ5285 & 洛谷4424 & UOJ384:[HNOI/AHOI2018]寻宝游戏——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5285 https://www.luogu.org/problemnew/show/P4424 ht ...
- [HNOI/AHOI2018]寻宝游戏
题目大意: $n(n\le1000)$个$m(m\le5000)$位的二进制数,第$0$个数为$0$.用$\wedge$和$\vee$将这些数连接起来.$q(q\le1000)$次询问,每次给定一个$ ...
- 【洛谷4424】[HNOI/AHOI2018] 寻宝游戏(位运算思维题)
点此看题面 大致题意: 给你\(n\)个\(m\)位二进制数.每组询问给你一个\(m\)位二进制数,要求你从\(0\)开始,依次对于这\(n\)个数进行\(and\)或\(or\)操作,问有多少种方案 ...
- P3320 [SDOI2015]寻宝游戏 解题报告
P3320 [SDOI2015]寻宝游戏 题目描述 小B最近正在玩一个寻宝游戏,这个游戏的地图中有\(N\)个村庄和\(N-1\)条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以 ...
- [BZOJ3991][SDOI2015]寻宝游戏
[BZOJ3991][SDOI2015]寻宝游戏 试题描述 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择 ...
- 【BZOJ】【3991】【SDOI2015】寻宝游戏
dfs序 我哭啊……这题在考试的时候(我不是山东的,CH大法吼)没想出来……只写了50分的暴力QAQ 而且苦逼的写的比正解还长……我骗点分容易吗QAQ 骗分做法: 1.$n,m\leq 1000$: ...
随机推荐
- PYQT5实现 关闭 提示弹框
当关闭窗口时,要实现如下功能: def closeEvent(self, event): reply = QtWidgets.QMessageBox.question(self, '警告', '退出后 ...
- kylin的clube合并后清理hbase中产生的相关历史表
kylin的clube合并后清理hbase中产生的相关历史表 kylin 的clube 历史的每次构建,都会产生一个hbase的表:虽然可以设置按照一定策略合并,但是合并后hbase 历史表不会被自动 ...
- 设计模式之模版方法模式(Template Method Pattern)
一.什么是模版方法模式? 首先,模版方法模式是用来封装算法骨架的,也就是算法流程 既然被称为模版,那么它肯定允许扩展类套用这个模版,为了应对变化,那么它也一定允许扩展类做一些改变 事实就是这样,模版方 ...
- 构建NetCore应用框架之实战篇(四):BitAdminCore框架1.0登录功能细化及技术选型
本篇承接上篇内容,如果你不小心点击进来,建议从第一篇开始完整阅读,文章内容继承性连贯性. 构建NetCore应用框架之实战篇系列 一.BitAdminCore框架1.0版本 1.1.0版本是指最小版本 ...
- Docker容器的原理与实践(上)
本文来自网易云社区. 虚拟化 是一种资源管理技术,将计算机的各种资源予以抽象.转换后呈现出来, 打破实体结构间的不可切割的障碍,使用户可以比原本更好的方式来应用这些资源. Hypervisor 一种运 ...
- git 拖下laravel 代码后报错 Warning: require(D:\WWW\laravel\bootstrap/../vendor/autoload.php
omposer install 执行 Problem 1 - Installation request for doctrine/annotations v1.5.0 -> sat ...
- webpack 4 入坑及爬坑记录
一.安装 在本机安装好nodejs的基础上,window操作系统,cmd打开控制台,添加到创建的文件夹下 npm init //初始化npm npm install webpack --save-de ...
- 原来css也可以计算-calc()使用
在浏览其他人的源代码时,看到了一个陌生的属性:width:calc(100% - 10px -10px); 出于好奇心,百度了一下,看到了以下这篇文章,http://www.w3cplus.com/c ...
- Google 团队效能研究 | 为什么雇用最聪明的人是远远不够的?
简评:Google 的一项团队效能研究结果,可能会让你重新认识如何建立一个优秀的团队. Google 的搜索业务可能最为人所知,但 Google 可不仅仅有搜索业务,它可能还是最擅于大数据研究的公司之 ...
- jQuery选择器(基础及应用)
jQuery选择器 jQuery的核心思想就是:选取元素,对其操作. jquery选择器对开发有以下优势:写法简洁,不需要考虑主流浏览器是否支持某些选择器(jquery支持css1-css3),不需要 ...