- 国庆模拟赛2
大家把代码都贴出来借鉴一下
- @ 2025-10-1 19:30:00
n
1 comments
-
G25dengzheyuan LV 1 @ 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