小H和密码
链接:https://www.nowcoder.com/acm/contest/72/B
来源:牛客网
题目描述
密码锁由N个转盘组成,编号为1~N,每个转盘有M个位置,每个位置上要么有一个小写字母,要么没有任何字符。一个密码能被转盘表示出,当且仅当指定每个转盘上面的某一个位置,然后将这些位置按照所属的转盘编号顺次连接(空位置直接忽略),可以得到这个密码
小H并没有得到任何线索,因此只能猜,她一共猜了Q次,但并不知道自己猜的密码能否被表示出来,于是她向你求助
输入描述:
第1行,三个整数N,M,Q
第2~N+1行,每行一个长度为M的字符串,依次表示每个转盘上的字符
第N+2~N+Q+1行,每行一个长度不超过10000的字符串,表示小H猜的密码
2≤N,Q≤300,2≤M≤27,同一个转盘上每种字符最多出现一次
输出描述:
输出Q行,每行都是YES或NO,依次表示小H猜的每个字符串能否被表示出
输入例子:
3 2 3
a#
ab
bc
aa
bb
ba
输出例子:
NO
YES
NO
-->
输入
3 2 3
a#
ab
bc
aa
bb
ba
输出
NO
YES
NO
备注:
#表示空字符 分析:
用贪心确定每个密码盘选哪个字符是错误的
递归肯定超时,剪枝都补救不了
所以这题看起来字符串模拟的题,居然要用dp写。。。
考虑DP,设dp[i][j]表示前i个密码盘,有j个选了某个小写字母的方案 时间复杂度O(N^2Q)
则决策只有当前密码盘选择空字符或者小写字母两种
用桶记录每个位置有哪些可用字母,询问串过长直接输出NO
重点:初始化+bool传递

所以第二位选0个的项都设为1
看别人代码,学了一招,传递可行性用&1,很骚
#include<bits/stdc++.h>
using namespace std;
#define maxn 10000
typedef long long ll;
#define inf 2147483647
#define ri register int int n,m,q;
int str[][];
int dp[][];
char ss[maxn],s[maxn]; int main()
{
// freopen("test.txt","r",stdin);
// freopen("outout.txt","w",stdout);
cin>>n>>m>>q;
for(int i=; i<=n; i++)
{
scanf("%s",ss);
for(int j=; j<strlen(ss); j++)
{
if(ss[j]=='#')
str[i][]=;
else str[i][ss[j]-'a'+]=;
}
}
while(q--)
{
memset(dp,,sizeof(dp));
scanf("%s",s+);
int len=strlen(s+);
if(len>n){
cout<<"NO"<<endl;
continue;
}
for(int i=; i<=n; i++)
dp[i][]=;
for(int i=; i<=n; i++)
for(int j=; j<=i; j++)
{
if(str[i][s[j]-'a'+])
dp[i][j]=dp[i-][j-]&;
if(str[i][]&&!dp[i][j])
dp[i][j]=dp[i-][j]&;
}
if(dp[n][len])
cout<<"YES";
else cout<<"NO";
cout<<endl;
}
return ;
}
小H和密码的更多相关文章
- 【Wannafly挑战赛10 - B】小H和密码(DP)
试题链接:https://www.nowcoder.com/acm/contest/72/B 题目描述 小H在击败怪兽后,被一个密码锁挡住了去路 密码锁由N个转盘组成,编号为1~N,每 ...
- wannafly 挑战赛10 小H和密码
题意:中文题就不解释了 题解: dp[i][j]表示前i 个轮盘 和一个字符串前j 个字符的匹配情况 ,具体的状态转移解释见代码 #include <cstdio> #include &l ...
- bzoj4447[Scoi2015]小凸解密码
4447: [Scoi2015]小凸解密码 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 150 Solved: 58[Submit][Status ...
- bzoj 4447 小凸解密码
bzoj 4447 小凸解密码 先将原始状态的 \(B\) 处理出来,可以发现,若不修改,则每次指定的起始位置不同,对这个环 \(B\) 带来的影响只有 \(B_0\) 不同,即每次 \(B_0=A_ ...
- Problem D: 小平查密码
Problem D: 小平查密码 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 194 Solved: 40[Submit][Status][Web ...
- 小明的密码-初级DP解法
#include #include #include using namespace std; int visited[5][20][9009];// 访问情况 int dp[5][20][9009] ...
- hihocoder 1347 小h的树上的朋友
传送门 时间限制:18000ms单点时限:2000ms内存限制:512MB 描述 小h拥有$n$位朋友.每位朋友拥有一个数值$V_i$代表他与小h的亲密度.亲密度有可能发生变化.岁月流逝,小h的朋友们 ...
- scauoj 18025 小明的密码 数位DP
18025 小明的密码 时间限制:4000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC Description 小明的密码由N(1<=N& ...
- 【渗透笔记】拿下某小H网的全过程
自从班上A片小王子的7个T资源被封了以后,本小白为造福全班同学,尝试拿下个小H网,先用webrobot搜某些只有小H网才会出现的关键词 本以为直接导出放御剑里跑就行了,然并软.于是用awvs扫了一下, ...
随机推荐
- 0<Double.MIN_VALUE
好吧, 吐嘈一下: 前几天写代码时发现 Double 有几个静态成员变量, 如 MAX_VALUE , MIN_VALUE 等, 当时就自己"故名思意"了, 分别当成了 doubl ...
- Yii中文乱码 解决
需要将config/main.php改成utf-8编码即可
- chrome跨域访问
这里设计到跨域访问的问题,如果非要在本地来访问,可以这是chrome的参数. 1.打开chrome快捷方式->属性 2.末尾添加: --args --disable-web-security 3 ...
- ios 为什么拖拽的控件为weak 手写的strong
ib拖拽的控件自动声明为weak 而平时自己手写的为strong 在ios中,对象默认都是强引用,不是强引用赋值后会立即释放 ib声明weak 不立即被释放 简单说就是 1.声明的弱引用指向强引用 ...
- asp.net mvc +easyui 实现权限管理(二)
一写完后,好久没有继续写了.最近公司又在重新开发权限系统了,但是由于我人微言轻,无法阻止他们设计一个太监版的权限系统.想想确实是官大一级压死人啊, 没办法我只好不参与了 让他们去折腾. 我就大概说一下 ...
- mac系统使用介绍
点击左上角苹果-->关于本机 Dock-->偏好设置 推荐按装mac系统:OS X V10.8(山狮) Finder-->应用程序(安装程序)<==>我的电脑 Safar ...
- openwrt-rpcd服务ACL配置错误风险分析
前言 openwrt 是一个用于的 路由器 的开源系统. 其他类似的路由器系统相比它的更新速度非常的快,可以看看 github 的更新速度 https://github.com/openwrt/ope ...
- RollViewPager图片轮播效果开源框架的使用
RollViewPager是一个自动轮播的Viewpager, 支持无限循环. 触摸时会暂停播放,直到结束触摸一个延迟周期以后继续播放. 看起来就像这样.指示器可以为点可以为数字还可以自定义,位置也可 ...
- node(3)MVC代码结构模式moogoDB的学习
---恢复内容开始--- 一.MVC代码结构模式 设计模式:观察者模式.中介者模式,这种模式,主要做的事情是处理类与类之间‘高内聚.低耦合’; 代码架构模式:MVC.MVVM.MVP Model:模型 ...
- Python 操作数据库pymysql
import pymysql #添加数据 conn , user='root', passwd='', db='yyy') #更改获取数据结果的数据类型,默认是元组,可以改为字典等:#cursor=c ...