主页 > 创业  > 

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

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

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

标签:

第十四届蓝桥杯:(二分算法)字串简写由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“第十四届蓝桥杯:(二分算法)字串简写