链接:https://www.nowcoder.com/acm/contest/72/B
来源:牛客网

题目描述

    小H在击败怪兽后,被一个密码锁挡住了去路
    密码锁由N个转盘组成,编号为1~N,每个转盘有M个位置,每个位置上要么有一个小写字母,要么没有任何字符。一个密码能被转盘表示出,当且仅当指定每个转盘上面的某一个位置,然后将这些位置按照所属的转盘编号顺次连接(空位置直接忽略),可以得到这个密码
    小H并没有得到任何线索,因此只能猜,她一共猜了Q次,但并不知道自己猜的密码能否被表示出来,于是她向你求助

输入描述:

  1. 1行,三个整数N,M,Q
    2~N+1行,每行一个长度为M的字符串,依次表示每个转盘上的字符
    N+2~N+Q+1行,每行一个长度不超过10000的字符串,表示小H猜的密码
    2N,Q3002M27,同一个转盘上每种字符最多出现一次

输出描述:

  1. 输出Q行,每行都是YESNO,依次表示小H猜的每个字符串能否被表示出

输入例子:
  1. 3 2 3
  2. a#
  3. ab
  4. bc
  5. aa
  6. bb
  7. ba
输出例子:
  1. NO
  2. YES
  3. NO

-->

示例1

输入

  1. 3 2 3
  2. a#
  3. ab
  4. bc
  5. aa
  6. bb
  7. ba

输出

  1. NO
  2. YES
  3. NO

备注:

  1. #表示空字符
  2.  
  3. 分析:

用贪心确定每个密码盘选哪个字符是错误的

递归肯定超时,剪枝都补救不了

所以这题看起来字符串模拟的题,居然要用dp写。。。

考虑DP,设dp[i][j]表示前i个密码盘,有j个选了某个小写字母的方案     时间复杂度O(N^2Q)

则决策只有当前密码盘选择空字符或者小写字母两种

用桶记录每个位置有哪些可用字母,询问串过长直接输出NO

重点:初始化+bool传递

所以第二位选0个的项都设为1

看别人代码,学了一招,传递可行性用&1,很骚

  1.  
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define maxn 10000
  4. typedef long long ll;
  5. #define inf 2147483647
  6. #define ri register int
  7.  
  8. int n,m,q;
  9. int str[][];
  10. int dp[][];
  11. char ss[maxn],s[maxn];
  12.  
  13. int main()
  14. {
  15. // freopen("test.txt","r",stdin);
  16. // freopen("outout.txt","w",stdout);
  17. cin>>n>>m>>q;
  18. for(int i=; i<=n; i++)
  19. {
  20. scanf("%s",ss);
  21. for(int j=; j<strlen(ss); j++)
  22. {
  23. if(ss[j]=='#')
  24. str[i][]=;
  25. else str[i][ss[j]-'a'+]=;
  26. }
  27. }
  28. while(q--)
  29. {
  30. memset(dp,,sizeof(dp));
  31. scanf("%s",s+);
  32. int len=strlen(s+);
  33. if(len>n){
  34. cout<<"NO"<<endl;
  35. continue;
  36. }
  37. for(int i=; i<=n; i++)
  38. dp[i][]=;
  39. for(int i=; i<=n; i++)
  40. for(int j=; j<=i; j++)
  41. {
  42. if(str[i][s[j]-'a'+])
  43. dp[i][j]=dp[i-][j-]&;
  44. if(str[i][]&&!dp[i][j])
  45. dp[i][j]=dp[i-][j]&;
  46. }
  47. if(dp[n][len])
  48. cout<<"YES";
  49. else cout<<"NO";
  50. cout<<endl;
  51. }
  52. return ;
  53. }
  1.  

小H和密码的更多相关文章

  1. 【Wannafly挑战赛10 - B】小H和密码(DP)

    试题链接:https://www.nowcoder.com/acm/contest/72/B 题目描述     小H在击败怪兽后,被一个密码锁挡住了去路     密码锁由N个转盘组成,编号为1~N,每 ...

  2. wannafly 挑战赛10 小H和密码

    题意:中文题就不解释了 题解: dp[i][j]表示前i 个轮盘 和一个字符串前j 个字符的匹配情况 ,具体的状态转移解释见代码 #include <cstdio> #include &l ...

  3. bzoj4447[Scoi2015]小凸解密码

    4447: [Scoi2015]小凸解密码 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 150  Solved: 58[Submit][Status ...

  4. bzoj 4447 小凸解密码

    bzoj 4447 小凸解密码 先将原始状态的 \(B\) 处理出来,可以发现,若不修改,则每次指定的起始位置不同,对这个环 \(B\) 带来的影响只有 \(B_0\) 不同,即每次 \(B_0=A_ ...

  5. Problem D: 小平查密码

    Problem D: 小平查密码 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 194  Solved: 40[Submit][Status][Web ...

  6. 小明的密码-初级DP解法

    #include #include #include using namespace std; int visited[5][20][9009];// 访问情况 int dp[5][20][9009] ...

  7. hihocoder 1347 小h的树上的朋友

    传送门 时间限制:18000ms单点时限:2000ms内存限制:512MB 描述 小h拥有$n$位朋友.每位朋友拥有一个数值$V_i$代表他与小h的亲密度.亲密度有可能发生变化.岁月流逝,小h的朋友们 ...

  8. scauoj 18025 小明的密码 数位DP

    18025 小明的密码 时间限制:4000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: G++;GCC Description 小明的密码由N(1<=N& ...

  9. 【渗透笔记】拿下某小H网的全过程

    自从班上A片小王子的7个T资源被封了以后,本小白为造福全班同学,尝试拿下个小H网,先用webrobot搜某些只有小H网才会出现的关键词 本以为直接导出放御剑里跑就行了,然并软.于是用awvs扫了一下, ...

随机推荐

  1. css 画图形大全

    Square   #square { width: 100px; height: 100px; background: red; } Rectangle   #rectangle { width: 2 ...

  2. vue 面试时需要准备的知识点

    前端火热的框架层出不穷,作为码农的我们,依旧需要去学习,去探索新的问题,学习新技术,其实就是为了写一手好的,自认为是高质量的代码.今天主要分享一下前端最火的框架vue,也是我比较喜欢的框架. vue上 ...

  3. LeetCode 544----Output Contest Matches

    During the NBA playoffs, we always arrange the rather strong team to play with the rather weak team, ...

  4. bootstrap-table 的必备参数

    1: 链接接口 url  请求的数据类型:dataType : "json"   后台请求方法 method  locale: 'zh-CN',//中文支持 pagination: ...

  5. 递归方程T(n)=aT(n/b)+f(n)之通用解法

    ,b>1为常数,f(n)为函数,T(n)=aT(n/b)+f(n)为非负数,令x=logba: 1.       f(n)=o(nx-e),e>0,那么T(n)=O(nx). 2.     ...

  6. Android 运行时权限处理(from jianshu)

    https://www.jianshu.com/p/e1ab1a179fbb 翻译的国外一篇文章. android M 的名字官方刚发布不久,最终正式版即将来临! android在不断发展,最近的更新 ...

  7. ecloipse背景修改豆沙

    Eclipse背景色的修改 Eclipse背景色的修改,修改为豆沙色  值是85 123 205 一.修改编辑区   ①这个比较简单一般都会不多说. 1.首先点击Window 然后选择Preferen ...

  8. IIS测试环境搭建

    1.控制面板->程序->程序和功能->打开或关闭Windows功能->Internet信息服务->Web管理工具,打开如下服务: 2.打开IIS管理器 2.1检查.net ...

  9. 0 Linux下Java使用ProcessBuilder执行命令与直接Bash执行命令之间的不同(环境变量方面)

    0 问题发生 xiaojietest.java package tasks; import java.io.BufferedReader; import java.io.BufferedWriter; ...

  10. LeetCode题解之Peak Index in a MountainArray

    1 题目描述 2.问题分析 直接从后向前遍历,找到 A[i] > A[i-1] 即可. 3.代码 int peakIndexInMountainArray(vector<int>&a ...