为什么我的做法跟别人如此不一样啊qwq

思路:暴力判每一个"BA"出现的位置,二分查找他前/后有没有满足条件的"AB",时间复杂度\(O(n\log_{2}n)\)

# include <bits/stdc++.h>

const int MaxN = 100010;

std::vector<int> a, b;//存下标

int upper(int x)//二分后面的位置
{
int l = 0, r = a.size();
while(l < r)
{
int mid = (l + r) >> 1;
if(a[mid] > x)
r = mid;
else l = mid + 1;
}
return l;
} int lower(int x)//二分前面的位置
{
int l = -1, r = a.size() - 1;
while(l < r)
{
int mid = (l + r + 1) >> 1;
if(a[mid] < x)
l = mid;
else
r = mid - 1;
}
return l;
}
int main()
{
std::string s;
std::cin >> s;
int len = s.length();
for(int i = 0; i < len - 1; i++)
{
std::string tmp = s.substr(i, 2);
if(tmp == "AB")
a.push_back(i);
else if(tmp == "BA")
b.push_back(i);
}//查找"AB"和"BA"出现的位置
if(a.size() == 0 || b.size() == 0)
return 0 * printf("NO");//特判
for(int i = 0; i < b.size(); i++)
{
int x = lower(b[i] - 1);//防重
int y = upper(b[i] + 1);
if(x != -1 || y != a.size())
return 0 * printf("YES");
}
printf("NO");
return 0;
}

最新文章

  1. 关于图片的PNG与JPG、JIF格式
  2. 【转】FPGA内部小数计算
  3. Ajax 提交session实效跳转到完整的登陆页面
  4. Could not create the view: An unexpected exception was thrown 【转】
  5. Informix 11.5 SQL 语句性能监控方法及实现
  6. 将excel导入mysql(使用navicat)
  7. 关于解决pyinstaller2.1将.py打包成exe文件在中文目录下不能执行的问题
  8. C++拷贝构造函数详解(转载)
  9. RIA算法解决最小覆盖圆问题
  10. CentOs7下systemd管理知识要点
  11. Optimistic and Pessimistic locking
  12. Python3基础 list(reversed()) 将一个列表逆转并输出
  13. 4.VUEX到底是什么
  14. 深入理解HashMap上篇
  15. Java提取URL某个参数的值
  16. 特殊计数序列——第二类斯特林(stirling)数
  17. T-SQL:函数大全(九)
  18. C++11 类型推导auto
  19. VMware下的Centos7联网并设置固定IP
  20. spark-shuffle分析

热门文章

  1. SAS学习笔记40 SAS程序运行过程
  2. prometheus+grafana监控redis
  3. js文件分段上传
  4. NIPS 2018 | 程序翻译新突破:UC伯克利提出树到树的程序翻译神经网络
  5. MySQL 触发器的使用
  6. WebSocket协议探究(一)
  7. reference website
  8. iOS 如何判断一个点在圆、方框、三角形区域内?
  9. 【已解决】项目加载失败,Web应用程序项目XX已配置为使用IIS
  10. XML文件解析之SAX解析