求调, k=2 的部分分过不去
#include<bits/stdc++.h>
using namespace std;
int n,m,k,ans,pos,ps,lim;
int dp[1119][104];
string s,t,t1,t2;
void svk1(){
pos=s.find(t);
while(pos!=-1){
pos=s.find(t,pos+1);
ans++;
ans%=1000000007;
}
printf("%d",ans);
return;
}
void svk2(){
for(int i=1;i<m;i++){
t1=t.substr(0,i);
t2=t.substr(i,m-i);
pos=s.find(t1);
while(pos!=-1){
ps=s.find(t2,pos+1);
while(ps!=-1){
ps=s.find(t2,ps+1);
ans++;
ans%=1000000007;
}
pos=s.find(t1,pos+1);
}
}
printf("%d",ans);
return;
}
void svkm(){
for(int i=0;i<=n;i++)dp[i][0]=1;
s=" "+s;
t=" "+t;
for(int i=1;i<=n;i++){
lim=min(i,m);
for(int ii=1;ii<=lim;ii++){
if(s[i]==t[ii]){
dp[i][ii]+=dp[i-1][ii-1];
dp[i][ii]%=1000000007;
}
dp[i][ii]+=dp[i-1][ii];
dp[i][ii]%=1000000007;
}
}
printf("%d",dp[n][m]);
return;
}
int main(){
scanf("%d %d %d",&n,&m,&k);
cin>>s;
cin>>t;
if(k==1)svk1();
else if(k==2)svk2();
else if(k==m)svkm();
return 0;
}