HDU2585
来源:互联网 发布:360.cn 域名价格 编辑:程序博客网 时间:2024/05/01 12:19
Problem: Hotel
Description: 一个人住酒店。但是他忘记门牌号码了,现在给出一个他模糊记得的门牌号字符串,这个字符串包含‘* ’,‘?’,‘a-z’。‘* ’表示零个或多个字符,而‘?’表示一个任意的字母。现在给出多个候选项,让你找出有几个符合这个人的门牌号的。
Solution: 递归。我们抓住‘* ’这个字符。这个字符可以让我们得出一个比原问题更小的解结构。比如我们比较“* hh”和“flushhip”,遇到‘* ’我们就比较星号后的‘hh’和“flushhip”、“lushhip”、“ushhip”、“shhip”、“hhip”等等。递归结束的条件是当模式串走到尽头。
Code(C++):
#include <stdio.h>#include <string.h>const int M=55;char tag[M];char str[M];int flag_len;bool work(int start_tag,int start_str,int len){ if(start_tag==flag_len&&start_str==len) return true; switch(tag[start_tag]){ case '*': if(start_tag+1==flag_len) return true; for(int i=start_str;i<len;i++) if(work(start_tag+1,i,len)) return true; return false; case '?': return work(start_tag+1,start_str+1,len); default: return tag[start_tag]==str[start_str]? work(start_tag+1,start_str+1,len):false; }}int main(){ while(~scanf("%s",tag)){ flag_len=strlen(tag); int n; int ans=0; for(scanf("%d",&n);n--;){ scanf("%s",str); ans+=work(0,0,strlen(str))? 1:0; } printf("%d\n",ans); } return 0;}
0 0
- HDU2585
- 【递推】【HDU2585】【hotel】
- 生成器模式
- Spring笔记整理
- 【Leetcode】2.Add Two Numbers 解题
- ZOJ-3752-The Three Guys【暴力】
- 福州大学第十二届程序设计竞赛-D - So Hard
- HDU2585
- tabFragment切换避免页面重叠
- 【HDU 2709】【水题】Sumsets
- Java防反编译技术
- spring3整合hibernate4的时候遇到的问题(Error applying BeanValidation relational constraints)
- 计算逆序对
- c++ 类的构造函数
- Android Handler中的handleMessage方法和post方法之源码剖析
- sql 连接