萌新前缀和 20pts 求助QAQ

P2679 [NOIP2015 提高组] 子串

死因:数组越界
by 喵仔牛奶 @ 2023-02-02 14:21:31


正确: ```cpp #include <bits/stdc++.h> using namespace std; const int N = 1005, M = 205, mod = 1e9 + 7; long long n, m, qwq, f[2][N][M], g[2][N][M]; char a[N], b[M]; int main() { cin >> n >> m >> qwq >> (a + 1) >> (b + 1); for (int i = 0; i <= n; i ++) f[0][i][0] = 1; for (int i = 0; i <= n; i ++) for (int j = 0; j <= m; j ++) { g[0][i][j] = f[0][i][j]; if (i && j) g[0][i][j] += g[0][i - 1][j - 1]; } for (int i = 1; i <= qwq; i ++) { int now = i & 1, sta = now ^ 1; memset(f[now], 0, sizeof f[now]); memset(g[now], 0, sizeof g[now]); for (int j = 1; j <= n; j ++) for (int k = 1; k <= m; k ++) { int l = 0; while (a[j - l] == b[k - l] && l < j && l < k) l ++; f[now][j][k] = (f[now][j - 1][k] + g[sta][j - 1][k - 1]) % mod; if (j > l && k > l) f[now][j][k] = (f[now][j][k] - g[sta][j - l - 1][k - l - 1] + mod) % mod; g[now][j][k] = (g[now][j - 1][k - 1] + f[now][j][k]) % mod; } } cout << f[qwq & 1][n][m] << '\n'; return 0; } ```
by 喵仔牛奶 @ 2023-02-02 14:21:53


|