n

1 comments

  • @ 2025-10-1 21:55:08
    
    #include<bits/stdc++.h>
    #define debug(a) cerr << #a << " = " << a << "\n" 
    using namespace std;
    
    using ll = long long;
    const int maxn = 1e3 + 10;
    const unsigned int mod = 1000000007;
    int n, m, k;
    int dp[2][202][202][2];
    unsigned int ans;
    string s1, s2;
    
    //void dfs(int i, int j = 0, bool f = 0){
    //	if(i + j >= n){
    //		return;
    //	}
    //	if(f && i + j == m){
    //		ans = (ans + 1) % mod;
    //	}else{
    //		if(s1[i] == s2[j]){
    //			for(int o = 1; o < m; ++o){
    //				if(!f)dfs(i + o, o, 1);
    //			}
    //		}
    //	}
    //} 
    
    void solve(int i, int j){
    	int j1;
    	for(; i < n; ++i){
    //		debug(i);
    //		debug(j) << "------\n";
    		if(s1[i] == s2[j]){
    			for(j1 = 1; j + j1 < m && i + j1 < n; ++j1){
    //					debug(i);
    //					debug(i + j1) << s1[i+j1] << "\n";
    //					debug(j+j1) << s2[j+j1] << "\n";
    				if(s1[i+j1] != s2[j+j1]){
    					break;
    				}
    			}
    			ans = (ans + (j + j1 == m)) % mod;
    //			debug(ans);
    		}
    	}
    }
    
    
    int main(){
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    	cout.tie(0);
    //	freopen("a4.in", "r", stdin);
    //	freopen("a5.out", "w", stdout);
    	cin >> n >> m >> k >> s1 >> s2;
    	if(k == 1){
    		int j; 
    		for(int i = 0; i < n; ++i){
    			if(s1[i] == s2[0]){
    				for(j = 1; j < m && i + j < n; ++j){
    					if(s1[i+j] != s2[j]){
    //						debug(i+j) << s1[i+j] << "\n";
    //						debug(j) << s2[j] << "\n";
    						break;
    					}
    				}
    				ans = (ans + (j == m)) % mod;
    			}
    		}
    	}else if(k == 2){
    		int j;
    		for(int i = 0; i < n; ++i){
    			if(s1[i] == s2[0]){
    				for(j = 0; j < m - 1 && i + j < n; ++j){
    //						debug(i);
    //						debug(i+j) << s1[i+j] << "\n";
    //						debug(j) << s2[j] << "\n";
    					if(s1[i+j] != s2[j]){
    						break;
    					}else{
    						solve(i + j + 1, j + 1);
    					}
    				}
    				
    			}
    		}
    	}
    //	else if(k == m){
    //		
    //	}
    	else{
    		s1 = ' ' + s1;
    		s2 = ' ' + s2;
    		dp[0][0][0][0] = 1;
    		dp[1][0][0][0] = 1;
    //		for(int i = 0; i <= n; ++i){
    //			dp[i][0][0][0] = 1;
    //		}
    		for(int i = 1; i <= n; ++i){
    			for(int j = 1; j <= m; ++j){
    				for(int x = 1; x <= k; ++x){
    					if(s1[i] == s2[j]){
    						dp[i&1][j][x][1] = ((dp[(i&1)^1][j-1][x-1][1] + dp[(i&1)^1][j-1][x][1]) % mod + dp[(i&1)^1][j-1][x-1][0]) % mod;
    						dp[i&1][j][x][0] = (dp[(i&1)^1][j][x][1] + dp[(i&1)^1][j][x][0]) % mod;
    					}else{
    						dp[i&1][j][x][1] = 0;
    						dp[i&1][j][x][0] = (dp[(i&1)^1][j][x][0] + dp[(i&1)^1][j][x][1]) % mod;
    					}
    					
    				}
    			}
    		}
    //		for(int i = 0; i <= n; ++i){
    //			for(int j = 0; j <= m; ++j){
    //				for(int x = 0; x <= k; ++x){
    //					cout << dp[i][j][x][0] << " " << dp[i][j][x][1] << "\n";
    //				}
    //				cout << "\n";
    //			}
    //		}
    		ans = (dp[n&1][m][k][0] + dp[n&1][m][k][1]) % mod;
    	}
    	cout << ans;
    } 
    /*
    
    1000 80 2
    lolucklololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololqlolololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololololo
    lolololololololololololololololololololololololololololololololololololololololo
    
    */
    
    
    🤡 3
    🍋 2
    • 1