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

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

这道题我们的做法是开两个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;
}

相关文章:

  • ArcGIS操作:11 计算shp矢量面的质心坐标
  • 【朝夕教育】《鸿蒙原生应用开发从零基础到多实战》004-TypeScript 中的泛型
  • JavaScript 变量的使用
  • Windows 环境下 Nginx、PHP 与 ThinkPHP 开发环境搭建
  • 关于服务器cpu过高的问题排查
  • 软考网络安全工程师条件
  • 探秘基带算法:从原理到5G时代的通信变革【八】QAM 调制 / 解调
  • golang的io
  • NL2SQL-基于Dify+阿里通义千问大模型,实现自然语音自动生产SQL语句
  • C++初阶--基本语法讲解
  • 数据安全_笔记系列11:GDPR(通用数据保护条例)合规框架
  • CDefView::_OnFSNotify函数分析
  • STM32MP157A单片机移植Linux系统使用python链接云服务器
  • Spring统一格式返回
  • Spring学习笔记03——Spring Boot的文件结构
  • XGMII(10 Gigabit Media Independent Interface)详解
  • Mac上安装Pycharm
  • 【音视频】音频基础
  • 前端项目打包生成 JS 文件的核心步骤
  • 飞牛NAS玩转DeepSeek-R1大模型并实现内外网自由互通
  • 公司网站备案需要什么/成都疫情最新消息
  • 网站咨询界面设计/新网站应该怎么做seo
  • 成都专业的网站建设公司/上海seo网络优化
  • 新郑网站建设公司/电商培训机构有哪些哪家比较好
  • 长沙专业网站建设公司排名/广告策划书
  • 公厂做网站需要开诚信通吗/软件测试培训班多少钱