hdu5311--Hidden String
2015-07-26 10:16
239 查看
题目大意:给出一个母串,一个模式串,把模式串任意分成三部分,在母串中按顺序匹配,问是否存在这样子的匹配。
分析:暴力。枚举两个分割的位置,然后判断第一部分是否有相应的匹配,匹配成功则母串中的指针指向分割位置+1,再判断第二部分第三部分,同理。当然,第三部分匹配成功就return true。
代码:
#include <cstdio>
#include <cstring>
char s[200], t[] = "anniversary";
int len;
bool ok(int x, int y) {
int f1 = 0, f2 = 0, f3 = 0;
for(int i = 0; i < len; i++) {
if(!f1) {
if(s[i] == t[0]) {
int f = 1;
for(int j = 1; j <= x && f; j++)
if(s[i+j] != t[j]) f = 0;
if(f) {
i = i+x;
f1 = 1;
}
}
}
else if(!f2) {
if(s[i] == t[x+1]) {
int f = 1;
for(int j = x+2; j <= y && f; j++)
if(s[i+j-x-1] != t[j]) f = 0;
if(f) {
i = i+y-x-1;
f2 = 1;
}
}
}
else if(!f3) {
if(s[i] == t[y+1]) {
int f = 1;
for(int j = y+2; j <= 10 && f; j++)
if(s[i+j-y-1] != t[j]) f = 0;
if(f) return true;
}
}
}
return false;
}
int main() {
int T;
scanf("%d", &T);
while(T--) {
scanf("%s", s);
len = strlen(s);
int flag = 0;
for(int i = 0; i < 9 && !flag; i++)
for(int j = i+1; j < 10 && !flag; j++)
if(ok(i, j)) flag = 1;
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}
分析:暴力。枚举两个分割的位置,然后判断第一部分是否有相应的匹配,匹配成功则母串中的指针指向分割位置+1,再判断第二部分第三部分,同理。当然,第三部分匹配成功就return true。
代码:
#include <cstdio>
#include <cstring>
char s[200], t[] = "anniversary";
int len;
bool ok(int x, int y) {
int f1 = 0, f2 = 0, f3 = 0;
for(int i = 0; i < len; i++) {
if(!f1) {
if(s[i] == t[0]) {
int f = 1;
for(int j = 1; j <= x && f; j++)
if(s[i+j] != t[j]) f = 0;
if(f) {
i = i+x;
f1 = 1;
}
}
}
else if(!f2) {
if(s[i] == t[x+1]) {
int f = 1;
for(int j = x+2; j <= y && f; j++)
if(s[i+j-x-1] != t[j]) f = 0;
if(f) {
i = i+y-x-1;
f2 = 1;
}
}
}
else if(!f3) {
if(s[i] == t[y+1]) {
int f = 1;
for(int j = y+2; j <= 10 && f; j++)
if(s[i+j-y-1] != t[j]) f = 0;
if(f) return true;
}
}
}
return false;
}
int main() {
int T;
scanf("%d", &T);
while(T--) {
scanf("%s", s);
len = strlen(s);
int flag = 0;
for(int i = 0; i < 9 && !flag; i++)
for(int j = i+1; j < 10 && !flag; j++)
if(ok(i, j)) flag = 1;
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}
相关文章推荐
- 杭电ACM2034java做法
- 我叫草丛的原因
- poj 2723 Get Luffy Out 【2-sat + 二分查找判断可行性】
- [知识点]拓扑排序
- 基础最短路(模板 spfa)
- HDU 1561 The more, The Better
- hiho一下 第五十六周 高斯消元·一(高斯消元解整数方程组)
- POJ 2002 Squares【值得摸索的一道二分+点旋转】
- 038.category 分类/类别
- 901-2几个注册表相关函数
- web中的HTTP协议
- HDU 1256 画8
- 逻辑回归模型
- HNU13303 Counting substhreengs(递推)
- linux下如何用c语言调用shell命令http://blog.csdn.net/hzhsan/article/details/7989921
- VM(虚拟机安装win7 提示 :units specified don't exist, SHSUCDX can't install)解决方法
- CentOS下cp命令中拷贝所有的写法
- AIX6.1/11.2.0.3在有关数据库SWAP一个BUG
- MFC之目录结构及消息流转(一)
- Decode the tape