求调
查看原帖
求调
1082999
jfls211320zhr楼主2024/11/19 17:19

求调, k=2k=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;
}
2024/11/19 17:19
加载中...