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