BF算法

#include<bits/stdc++.h>
#define ns "-1"
#define fs(i,x,y,z) for(ll i=x;i<=y;i+=z)
#define ft(i,x,y,z) for(ll i=x;i>=y;i+=z)
#define ll long long
#define ull unsigned long long
#define db double
#define ms(a,b) memset(a,b,sizeof(a))
#define sz(a) sizeof(a)
using namespace std;
const int rw[]={-1,0,1,0,-1,1,-1,1},cl[]={0,1,0,-1,-1,1,1,-1};
const int N=100001,inf=0x7f7f7f7f;
int n,m,f,flg,k;//f:第一次出现的位置;k:出现的总次数;
char s[N],p[N];//s:总串;p:模式串。
//无解输出0 0
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
    cout.tie(0);
    cin>>n>>(s+1)>>m>>(p+1);
    fs(start,1,(n-m+1),1){
    	flg=0;
    	fs(q,start,(start+m-1),1){//逐个比较
    		//cout<<"q:"<<' '<<q<<' '<<s[q]<<' '<<p[q-start+1]<<endl;
    		if(s[q]!=p[q-start+1]){
    			flg=1;break;
			}
		}
		if(flg==0){
			if(f==0) f=start;
			k++;
		} 
	}
	cout<<f<<' '<<k;
	return 0;
}
//O((N-M)M)=O(NM-M^2)=O(NM)