还是超时,,有时间再改改吧
思路就是-------刚刚学了string字符串里面的find函数find(str1,n)—从n位置开始找,找aa和bb
然后找到要判断前后是否是字母,不是的话再加进数组,isalpha()
最后双重循环,不能指针那样移动,可能一个Alice和好几个Bob都距离很小,,可能是这里超时?
//----好好写代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+10;
int kk;
string aa="Alice";
string bb="Bob";
int a[N],b[N];
//记录出现的位置
long long cnt=0;
int cmp(int a,int b){
if(a>=b) return 1;
return 2;
}
int main(){
cin>>kk;
getchar();
string s;
getline(cin,s);
// cout<<s.length() ;
int m=0,j=0;
int len=s.length() ;
for(int i=0;i<len;){
i=s.find(aa,i);
if(i==-1) break;
if(!(isalpha(s[i-1])||isalpha(s[i+5]))){
a[m++]=i;
}
i=i+5;
}
// for(int i=0;i<m;i++) cout<<a[i]<<" ";
// cout<<endl;
for(int i=0;i<len;){
i=s.find(bb,i);
if(i==-1) break;
if(!(isalpha(s[i-1])||isalpha(s[i+3]))){
b[j++]=i;
}
i=i+3;
}
// for(int i=0;i<j;i++) cout<<b[i]<<" ";
for(int i=0;i<m;i++){
for(int k=0;k<j;k++){
int t=a[i]-b[k];
if((t<kk+3&&t>=0)||(t<=0&&t>=-(kk+5))){
cnt++;
}
}
}
cout<<cnt<<endl;
return 0;
}