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[N]; int main()
{
int T; scanf("%d",&T);
while(T--)
{
int flag=;
scanf("%s",str);
int len=strlen(str);
int abc,h;
abc=h=-;
if(strstr(str,"aba"))
abc=strstr(str,"aba")-str;
if(strstr(str,"h"))
h=strstr(str,"h")-str;
if(abc==- || h==- || h==len-)
flag=;
for(int i=; i<abc; i++)
{
if(str[i]!='a')
{
flag=;
break;
}
}
int v1=,v2=;
for(int i=abc+; i<h; i++)
{
if(str[i]!='b' && str[i]!='d')
{
flag=;
break;
}
if(str[i]=='d' && str[i]=='b')
{
flag=;
break;
}
if(str[i]=='b')
v1++;
if(str[i]=='d')
v2++;
}
if(v1!= && v2==)
flag=;
if(v1>)
flag=;
v1=v2=;
for(int i=h+; str[i]; i++)
{
if(str[i]!='f' && str[i]!='k')
{
flag=;
break;
}
if(str[i]=='f')
v1++;
if(str[i]=='k')
v2++;
}
if(v1== && v2==)
flag=;
if(v1== && v2== && v1!=v2)
flag=;
if(flag==)
printf("NO\n");
else
printf("YES\n");
}
return ;
}

最新文章

  1. 集成基于CAS协议的单点登陆
  2. Java--Semaphore控制并发线程数量
  3. swiper的使用
  4. Opencv读取视频
  5. Android中style的使用
  6. linux删除、读取文件原理
  7. jquery中eq和get的区别与使用方法
  8. thinkphp 内置函数详解
  9. Nodejs之package.json介绍说明
  10. 014 在Spark中完成PV与UV的计算,重在源代码
  11. 【java】函数概述
  12. 移动平台的meta标签
  13. openssl windows平台编译库
  14. Spark Standalone与Spark on YARN的几种提交方式
  15. delphi 线程的使用
  16. SQL-主键与外键
  17. JS Map对象
  18. a positive definite matrix
  19. HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)
  20. HUST-1407 郁闷的小J

热门文章

  1. 杨辉三角python的最佳实现方式,牛的不能再牛了
  2. linux截图工具
  3. Docker Hello World容器运行报错的解决办法
  4. Java随机产生中文昵称
  5. CNN完成mnist数据集手写数字识别
  6. git 添加外部项目地址
  7. 手把手入门docker (好多图)
  8. spring注解开发-容器创建全过程(源码)
  9. 区间DP入门
  10. 约束RMQ