hdu 5311 Hidden String dfs
2015-09-04 22:27
399 查看
Hidden String Accepts: 437 Submissions: 2174
问题描述
今天是BestCoder一周年纪念日. 比赛管理员Soda有一个长度为nn的字符串ss. 他想要知道能否找到ss的三个互不相交的子串依次连接之后得到字符串”anniversary”.
输入描述
输入有多组数据. 第一行有一个整数TT (1 \le T \le 100)(1≤T≤100), 表示测试数据组数. 然后对于每组数据:
一行包含一个仅含小写字母的字符串ss (1 \le |s| \le 100)(1≤∣s∣≤100).
输出描述
对于每组数据, 如果Soda可以找到这样三个子串, 输出”YES”, 否则输出”NO”.
输入样例
2
annivddfdersewwefary
nniversarya
输出样例
YES
NO
题目有点不清楚,想看的戳链接
http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=610&pid=1002
解题思路:
写了一下午,最后发现看错了题,题目问的是三个互不相交的子串,我错误理解成了三个子串必须中间隔着东西,也就是必须分开,但事实是不一定要分成三个部分,只要一个串能分成三部分就好了,也就是即使是一个串也可以,因为它也能分成三部分。
所以这道题我们需要的是找到小于等于三个串,使它们能拼成题目所需要的anniversary,然后用深搜,找到一个相符的串,就dfs一下,直到串结束。
参考博客:http://www.bubuko.com/infodetail-998261.html
问题描述
今天是BestCoder一周年纪念日. 比赛管理员Soda有一个长度为nn的字符串ss. 他想要知道能否找到ss的三个互不相交的子串依次连接之后得到字符串”anniversary”.
输入描述
输入有多组数据. 第一行有一个整数TT (1 \le T \le 100)(1≤T≤100), 表示测试数据组数. 然后对于每组数据:
一行包含一个仅含小写字母的字符串ss (1 \le |s| \le 100)(1≤∣s∣≤100).
输出描述
对于每组数据, 如果Soda可以找到这样三个子串, 输出”YES”, 否则输出”NO”.
输入样例
2
annivddfdersewwefary
nniversarya
输出样例
YES
NO
题目有点不清楚,想看的戳链接
http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=610&pid=1002
解题思路:
写了一下午,最后发现看错了题,题目问的是三个互不相交的子串,我错误理解成了三个子串必须中间隔着东西,也就是必须分开,但事实是不一定要分成三个部分,只要一个串能分成三部分就好了,也就是即使是一个串也可以,因为它也能分成三部分。
所以这道题我们需要的是找到小于等于三个串,使它们能拼成题目所需要的anniversary,然后用深搜,找到一个相符的串,就dfs一下,直到串结束。
#include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; char a[]="anniversary",s[105]; int m,T,n; bool mark; bool dfs(int i,int j,int k) { if(k<=3&&i>=m) { return true; } for(; j<n; j++) { if(k<=3&&i>=m) return true; if(k>3) return false; int i1=i; int j1=j; while(i1<m&&j1<n&&a[i1]==s[j1]) { i1++; j1++; } if(i1>i&&dfs(i1,j1,k+1)) { return true; } } return false; } int main() { scanf("%d",&T); m=strlen(a); while(T--) { mark=false; scanf("%s",s); n=strlen(s); if(dfs(0,0,0)) printf("YES\n"); else printf("NO\n"); } return 0; }
参考博客:http://www.bubuko.com/infodetail-998261.html
相关文章推荐
- Codeforces Gym 100337B Lempel-Ziv Compression 字符串DP
- 进程与线程的一个简单解释
- xpath学习(一)
- 1024,一群男人与他们的飞机杯的故事
- 五校联考第一套第一式总结
- 我才不是萝莉控呢
- Android 自定义View流程
- matlab读取/播放视频的函数(1)
- 触发器
- java.util之Iterable与Iterator
- Linux系统管理 --磁盘管理与系统管理
- JavaScript基础知识
- [转载]Eclipse自定义快捷键导出和导入方法
- 华为机试测试- 大数相加
- 获取二叉树深度叶子数
- Linux分享之iptables:防火墙以及网络协议基本原理
- Kaggle系列——Titanic 80%+精确度纪录
- netstat 的10个基本用法
- hdu 4355 Party All the Time 三分
- Android内存管理机制详解