#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; } |
English