当前位置: 首页 > article >正文

第十四届蓝桥杯:(二分算法)字串简写

这道题我们的做法是开两个vector,分别把a和b字符的下标存进去,然后遍历a字符,我们要求长度必须大于等于k,我们可以画个图,也就是说b的下标减a的下标必须大于等于k-1 也就是b的下标必须大于等于a的下标+k-1  我们用二分找出b数组里面大于等于这个值最小的数的下标,然后用nb减去这个下标就是满足要求的个数了

#include <iostream>
#include <vector>
using namespace std;
typedef long long LL;
string s;
LL ret;
vector<LL> a, b;
char ca, cb;
LL k;
int main()
{
	cin >> k >> s >> ca >> cb;

	LL ns = s.size();
	for (int i = 0; i < ns; i++)
	{
		if (s[i] == ca) a.push_back(i);
		else if (s[i] == cb) b.push_back(i);
	}
	LL na = a.size();
	LL nb = b.size();

	for (int i = 0; i < na; i++)
	{
		LL val = a[i] + k - 1;
		LL left = 0, right = nb - 1;
		while (left < right)
		{
			LL mid = (left + right) / 2;
			if (b[mid] >= val) right = mid;
			else left = mid + 1;
		}
		if (b[left] >= val)
			ret +=  nb- left;
	}
	cout << ret << endl;
}


http://www.kler.cn/a/570492.html

相关文章:

  • 【MySQL】CAST()在MySQL中的用法以及其他常用的数据类型转换函数
  • 【部署】Docker Compose 指令备忘清单(超级详细!)
  • docker拉取乌班图并且ssh连接
  • C++小课堂——变量的声明,赋值和初始化
  • Redis是什么?如何使用Redis进行缓存操作?
  • Powershell和BTEQ工具实现带多组参数和标签的Teradata数据库批量数据导出程序
  • 深度学习-13.深度强化学习:深度 Q 学习
  • 【网络编程】之TCP通信步骤
  • 基础篇——深入解析SQL多表操作与关联查询:构建复杂数据关系的桥梁
  • 《解锁HarmonyOS NEXT高阶玩法:艺术图像识别功能开发全攻略》
  • Nginx将tomcat项目转发。将非80/443端口口转为80或443及https
  • halcon学习笔记1
  • Centos7部署k8s(单master节点安装)
  • 硅基流动前端如何设置tool工具
  • LINUX网络基础 - 网络编程套接字,UDP与TCP
  • 27、Java 反射机制
  • 数据结构(初阶)(五)----栈
  • 如何使用Python和SQLAlchemy结合外键映射来获取其他表中的数据
  • 迷你世界脚本组队接口:Team
  • C语言:51单片机 程序设计基础