#include <iostream>
#include <string.h>
#include <algorithm>
#include <unordered_map>
using namespace std;
typedef long long ll;
const int MAXN = 3e3+5;
const ll MOD = 1e9+7, BASE = 97, INV = 268041239;
ll pw[MAXN], invpw[MAXN];
void init() {
pw[0] = invpw[0] = 1;
for (int i = 1; i < MAXN; i++) {
pw[i] = (pw[i-1]*BASE)%MOD;
invpw[i] = (invpw[i-1]*INV)%MOD;
}
}
pair<int, int> check(string &s, string &t, int k) {
int n = s.size()-2, m = t.size()-2;
ll sq[n+1], tq[m+1];
sq[0] = tq[0] = 0;
for (int i = 1; i <= n; i++) {
sq[i] = (sq[i-1] + pw[i]*(s[i]-'a'))%MOD;
}
for (int i = 1; i <= m; i++) {
tq[i] = (tq[i-1] + pw[i]*(t[i]-'a'))%MOD;
}
unordered_map<ll, int> dt;
for (int i = 0; i+k <= n; i++) {
ll val = (sq[i+k]-sq[i]+MOD)%MOD*invpw[i+1]%MOD;
dt[val] = i;
}
for (int i = 0; i+k <= m; i++) {
ll val = (tq[i+k]-tq[i]+MOD)%MOD*invpw[i+1]%MOD;
for (int j = 1; j <= k; j++) {
if (dt.count(val)) return {dt[val], i};
val = (val-(t[i+j]-'a')+MOD)%MOD;
val = (val*invpw[1])%MOD;
val = (val+pw[k-1]*(t[i+j]-'a'))%MOD;
}
}
return {-1, -1};
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
init();
string s, t;
cin >> s >> t;
s = '.'+s+'.';
t = '.'+t+'.';
int l = 0, r = min(s.size()-1, t.size()-1);
pair<int, int> ans[min(s.size(), t.size())];
while (r-l > 1) {
int mid = (l+r)>>1;
pair<int, int> check1 = check(s, t, mid);
reverse(t.begin(), t.end());
pair<int, int> check2 = check(s, t, mid);
reverse(t.begin(), t.end());
if (check1 != make_pair(-1, -1)) {
l = mid;
ans[l] = check1;
} else if (check2 != make_pair(-1, -1)) {
l = mid;
ans[l] = make_pair(check2.first, t.size()-check2.second-l-2);
}
else r = mid;
}
cout << l << '\n' << ans[l].first << ' ' << ans[l].second;
return 0;
}
/*
zxyabcd
yxbadctz
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |