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

蓝桥杯字串简写(二分)

输入
4
abababdb a b 

输出

6

 思路:

如果暴力,o(n**2),超时,想到可以先与处理一下,记录c1出现的位置,再根据c2的位置用二分法看前面有多少个符合条件的c1。

why二分:

代码:一些细节注意点在注释上写了,注意用vector.size()时,初始化vector<> v(N),不要写N,不要规定范围(因为这个找了半天错误,服了),还有,v.size()返回的是无符号整型,如果v.size()-x,x>1的话,一定要注意不能为负,或者强制类型转换也可以,(int)v.size()-x;

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=5e5+10;
int ans=0;
vector<int> a;
signed main()
{
	int k;
	cin>>k;
	string s;
	cin>>s;
	char c1,c2;
	cin>>c1>>c2;
	for(int i=0;i<s.size();i++)
	{
		if(s[i]==c1)
		 	a.push_back(i);
		   
		if(s[i]==c2)
		{
			if(a.empty()||i-k+1<0) continue;
			
			int l=0,r=a.size()-1;//在前面的c1中寻找 
			cout<<a.size()<<endl;;
			while(l<r)
			{
				int mid=l+r+1>>1;//临界判断一下
				if(a[mid]<=i-k+1) l=mid;
				else r=mid-1; 
				cout<<l<<" "<<r<<endl;
			}
			if(a[l]<=i-k+1) //一定要判断,因为i-k+1<0的条件筛选只是最初步的,如果i-(第一个c1出现的位置)+1<0的条件,那可以不用这个 
			ans+=(l+1);
		 } 
		
	}
	cout<<ans<<endl;
}


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

相关文章:

  • DeepSeek-V3 与 DeepSeek R1 对比分析:技术与应用的全面解析
  • Chapter 4-1. Troubleshooting Congestion in Fibre Channel Fabrics
  • web-文件上传-CTFHub
  • 从零开始:OpenCV 图像处理快速入门教程
  • MLA 架构
  • mounted钩子函数里如何操作子组件的DOM?
  • 火语言RPA--JSON提取
  • Go语言中的高阶函数
  • 【MySQL】centos 7 忘记数据库密码
  • Maven 构建生命周期与阶段详解
  • Redis存储⑤Redis五大数据类型之 List 和 Set。
  • Java面试场景题分享
  • stm32生成hex文件详解
  • 如何在 Kivy 中从按钮更新选项卡内容
  • 【重生之学习C语言----水仙花篇】
  • PostgreSQL:数据库迁移与版本控制
  • 【Unity3D小功能】Unity3D中实现超炫按钮悬停效果
  • Golang 并发机制-6:掌握优雅的错误处理艺术
  • SQL中Limit的用法详解
  • DeePseek结合PS!批量处理图片的方法教程
  • 【react】react面试题
  • JavaWeb开发学习笔记--MySQL
  • JavaScript的 switch 方法
  • 通过STM32实现外设控制应用案例
  • Postman简介
  • 【机器学习案列】糖尿病风险可视化及预测