蓝桥杯子串问题
暴力法(应该只能过部分样例)
哈希
#include<bits/stdc++.h>
using namespace std;
int a[10001],b[10001],c[10001];
char s[10001];
int len;
int p=999997,x=101;
map<int,int>mp;
int main(){
scanf("%s",s+1);
len=strlen(s+1);
a[0]=1;
for(int i=1;i<=len+1;i++)
a[i]=(a[i-1]*x)%p;
for(int i=1;i<=len;i++){
b[i]=(b[i-1]*x+s[i]-'a')%p;
c[i]=b[i];
}
for(int i=1;i<=len;i++){
for(int j=i;j<=len;j++){
int k1,k2,sum=0;
k1=(c[j]-(c[j-i]*a[i]%p)+p)%p;
for(int k=i;k<=len;k++){
k2=(b[k]-(b[k-i]*a[i]%p)+p)%p;
if(k1==k2) sum++;
if(j==2&&k==2) cout<<k1<<" "<<k2<<" "<<i<<endl;
if(j==2&&k==3) cout<<k1<<" "<<k2<<" "<<i<<endl;
}
mp[sum]++;
}
}
for(int i=1;i<=len;i++){
cout<<mp[i]/i<<endl;
}
}