您的位置:首页 > 其它

Match the string--hdu1797(模拟)

2016-04-16 20:19 423 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1797

就是模拟

我的思路是标记aba 和h的位置

然后就判断是否正确 就行了

还有就是 最后 fkfkfkfk交叉也可以

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <math.h>
#include <ctype.h>

using namespace std;
#define memset(a,b) memset(a,b,sizeof(a))
#define N 101000
typedef long long  ll;
char str
;

int main()
{
int T;

scanf("%d",&T);
while(T--)
{
int flag=0;
scanf("%s",str);
int len=strlen(str);
int abc,h;
abc=h=-1;
if(strstr(str,"aba"))
abc=strstr(str,"aba")-str;
if(strstr(str,"h"))
h=strstr(str,"h")-str;
if(abc==-1 || h==-1 || h==len-1)
flag=1;
for(int i=0; i<abc; i++)
{
if(str[i]!='a')
{
flag=1;
break;
}
}
int v1=0,v2=0;
for(int i=abc+3; i<h; i++)
{
if(str[i]!='b' && str[i]!='d')
{
flag=1;
break;
}
if(str[i]=='d' && str[i]=='b')
{
flag=1;
break;
}
if(str[i]=='b')
v1++;
if(str[i]=='d')
v2++;
}
if(v1!=0 && v2==0)
flag=1;
if(v1>1)
flag=1;
v1=v2=0;
for(int i=h+1; str[i]; i++)
{
if(str[i]!='f' && str[i]!='k')
{
flag=1;
break;
}
if(str[i]=='f')
v1++;
if(str[i]=='k')
v2++;
}
if(v1==0 && v2==0)
flag=1;
if(v1==0 && v2==0 && v1!=v2)
flag=1;
if(flag==1)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: