浅浅一个二分优化
#include<bits/stdc++.h>
using namespace std;
long long k,a[5000005],b[5000005],ca,cb,ans;
string st;
char c1,c2;
int ef(int x)
{
int l=1,r=cb,mid,ann;
while(l<=r)
{
mid=(l+r)/2;
if(b[mid]-x+1>=k)
{
ann=mid;
r=mid-1;
}
else l=mid+1;
}
if(b[ann]-x+1<k)return -1;
else return ann;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>k;
cin>>st>>c1>>c2;
for(int i=0;i<st.size();i++)
{
if(st[i]==c1)
{
ca++;
a[ca]=i+1;
}
if(st[i]==c2)
{
cb++;
b[cb]=i+1;
}
}
for(int i=1;i<=ca;i++)
{
int wz=ef(a[i]);
if(wz==-1)continue;
else
{
ans+=cb-wz+1;
}
}
cout<<ans;
}
0 回复
0 转发
2 喜欢
1 阅读



