#include <bits/stdc++.h> using namespace std; const int SIZE=3100; void imax(int &a, int b){ a=max(a, b); } void imin(int &a, int b){ a=min(a, b); } void lmax(long long &a, long long b){ a=max(a, b); } void lmin(long long &a, long long b){ a=min(a, b); } /* WARNING: I'm using strange bracket style! */ int arr[SIZE][SIZE]; int n, m, q, A, B, C, D; string a, b; int lcs(string x, string y){ for (int i=0; i<x.size(); i++) for (int j=0; j<y.size(); j++) arr[i+1][j+1]=max({arr[i][j+1], arr[i+1][j], (int)((x[i]==y[j])?arr[i][j]+1:0)}); return arr[x.size()][y.size()]; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m>>q>>a>>b; while (q--) cin>>A>>B>>C>>D, cout<<lcs(a.substr(A-1, B-A+1), b.substr(C-1, D-C+1))<<"\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 | #include <bits/stdc++.h> using namespace std; const int SIZE=3100; void imax(int &a, int b){ a=max(a, b); } void imin(int &a, int b){ a=min(a, b); } void lmax(long long &a, long long b){ a=max(a, b); } void lmin(long long &a, long long b){ a=min(a, b); } /* WARNING: I'm using strange bracket style! */ int arr[SIZE][SIZE]; int n, m, q, A, B, C, D; string a, b; int lcs(string x, string y){ for (int i=0; i<x.size(); i++) for (int j=0; j<y.size(); j++) arr[i+1][j+1]=max({arr[i][j+1], arr[i+1][j], (int)((x[i]==y[j])?arr[i][j]+1:0)}); return arr[x.size()][y.size()]; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m>>q>>a>>b; while (q--) cin>>A>>B>>C>>D, cout<<lcs(a.substr(A-1, B-A+1), b.substr(C-1, D-C+1))<<"\n"; return 0; } |