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

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

cpp 复制代码
#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;
}
相关推荐
远瞻。1 小时前
【论文精读】2023 AAAI--FastRealVSR现实世界视频超分辨率(RealWorld VSR)
论文阅读·算法·超分辨率重建
C++chaofan2 小时前
P2089 烤鸡
数据结构·c++·算法
橙子小哥的代码世界2 小时前
面向超大规模模型的提示词工程
深度学习·算法·大模型·提示词工程
远瞻。3 小时前
【论文精读】2023 CVPRW--EAVSR现实世界视频超分辨率(RealWorld VSR)
论文阅读·算法·超分辨率重建
图初3 小时前
路径规划算法BFS/Astar/HybridAstar简单实现
算法·动态规划·astar·宽度优先·hybridastar
2301_766536053 小时前
刷leetcode hot100返航版--贪心5/23
算法·leetcode·职场和发展
姬公子5213 小时前
leetcode hot100刷题日记——11.相交链表
算法·leetcode·链表
小学生的信奥之路3 小时前
力扣509题:斐波那契数列的解法与代码注释
c++·算法·leetcode·动态规划·斐波那契数列
Tiny番茄3 小时前
贪心介绍 LeetCode 455.分发饼干 LeetCode 376. 摆动序列 LeetCode 53. 最大子序和
算法·leetcode·职场和发展
jerry6093 小时前
蒙特卡洛树搜索 (MCTS)
人工智能·笔记·深度学习·学习·算法·机器学习