小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扫了一下, ...
随机推荐
- python函数之调用函数
调用函数 python中内置了许多函数,我们可以直接调用,但需要注意的是参数的个数和类型一定要和函数一致,有时候不一致时,可以进行数据类型转换 1.abs()函数[求绝对值的函数,只接受一个参数] # ...
- Linux 网络流量查看 Linux ip traffic monitor
Network monitoring on Linux This post mentions some linux command line tools that can be used to mon ...
- flutter 生命周期
前言:生命周期是一个组件加载到卸载的整个周期,熟悉生命周期可以让我们在合适的时机做该做的事情, flutter中的State生命周期和android以及React Native的生命周期类似. 先看一 ...
- maven 远程仓库、私服及镜像配置
maven仓库分类 本地仓库.远程仓库.远程仓库又有私服.中央仓库.其它公共库.中央仓库是maven自带的核心仓库. 仓库配置远程仓库可以配置多个,超级pom中定义的中央仓库 <reposito ...
- mysql navicat 及命令行 创建、删除数据库
1.命令行创建数据库 create database mybatis default character set utf8 collate utf8_general_ci; drop database ...
- 读写appSettings配置节方法
<configuration> <appSettings> <add key="Socket_Path_MW_data" value=&q ...
- Webapi通过报文获取post上来的数据
public HttpResponseMessage Post(HttpRequestMessage req) { var content = req.Content.ReadAsStringAsyn ...
- 点击单个cell高度变化的动画效果
点击单个cell高度变化的动画效果 效果 说明 1. 点击单个cell的时候,其展开与缩放动画实现起来是很麻烦的,做过相关需求的朋友一定知道其中的坑 2. 本例子只是提供了一个解决方案,为了简化操作, ...
- Java 系统学习梳理_【All】
Java基础 1. Java学习---JDK的安装和配置 2. Java学习---Java代码编写规范 2. Java学习---HashMap和HashSet的内部工作机制 3. Java学习---J ...
- php 代码编写规范
1 编写目的为了更好的提高技术部的工作效率,保证开发的有效性和合理性,并可最大程度的提高程序代码的可读性和可重复利用性,指定此规范.开发团队根据自己的实际情况,可以对本规范进行补充或裁减. 2 整体要 ...