#include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; typedef long long ll; typedef long double ld; typedef pair<int, int> PII; typedef pair<ll, int> PILL; typedef pair<ll, ll> PLL; const int MAX_N = 3e5+5; const int M = 3e4+5; const ll INF = (ll)(1e18); const int inf = 2e9; const ll MOD = 1000000007LL; int n, m, Q; string s, t; int lcs(string a, string b) { a = '#' + a; b = '#' + b; /*cout << "A: " << a << '\n'; cout << "B: " << b << '\n';*/ int lenA = a.size(); int lenB = b.size(); vector<int> dp(lenB, 0); for (int i = 1; i < lenA; i++) { vector<int> tmp(lenB, 0); for (int j = 1; j < lenB; j++) { int diag = dp[j-1]; if (a[i] == b[j]) diag++; tmp[j] = max({tmp[j-1], dp[j], diag}); } dp = tmp; /*for (int x: dp) cout << x << ' '; cout << '\n';*/ } return dp[lenB-1]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> Q; cin >> s >> t; for (int qq = 0; qq < Q; qq++) { int i, j, k, l; cin >> i >> j >> k >> l; string a = s.substr(i-1, j-i+1); string b = t.substr(k-1, l-k+1); cout << lcs(a, b) << '\n'; } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; typedef long long ll; typedef long double ld; typedef pair<int, int> PII; typedef pair<ll, int> PILL; typedef pair<ll, ll> PLL; const int MAX_N = 3e5+5; const int M = 3e4+5; const ll INF = (ll)(1e18); const int inf = 2e9; const ll MOD = 1000000007LL; int n, m, Q; string s, t; int lcs(string a, string b) { a = '#' + a; b = '#' + b; /*cout << "A: " << a << '\n'; cout << "B: " << b << '\n';*/ int lenA = a.size(); int lenB = b.size(); vector<int> dp(lenB, 0); for (int i = 1; i < lenA; i++) { vector<int> tmp(lenB, 0); for (int j = 1; j < lenB; j++) { int diag = dp[j-1]; if (a[i] == b[j]) diag++; tmp[j] = max({tmp[j-1], dp[j], diag}); } dp = tmp; /*for (int x: dp) cout << x << ' '; cout << '\n';*/ } return dp[lenB-1]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> Q; cin >> s >> t; for (int qq = 0; qq < Q; qq++) { int i, j, k, l; cin >> i >> j >> k >> l; string a = s.substr(i-1, j-i+1); string b = t.substr(k-1, l-k+1); cout << lcs(a, b) << '\n'; } return 0; } |