QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#432051 | #850. Edit Distance Yet Again | Made_in_Code | AC ✓ | 842ms | 39456kb | C++14 | 2.6kb | 2024-06-06 17:06:48 | 2024-06-06 17:06:48 |
Judging History
answer
#include <iostream>
#define LL long long
using namespace std;
const int kMaxN = 1e6 + 1, kMaxM = 1001;
const int kInf = 1e9, kBase = 15553, kMod = 715876003;
int o, n, m, k, f[kMaxM << 1][kMaxM];
LL hs[kMaxN], ht[kMaxN], pw[kMaxN];
string s, t;
void Max(int &x, int y) { x = max(x, y); }
int W() {
for (int i = 0; i <= k; i++) {
if (f[n - m + kMaxM][i] == m) {
cout << "YES\n"
<< i << '\n';
return i;
}
}
cout << "NO\n";
return 0;
}
int Print(int n, int m, int x) {
if (x <= 0) {
return n + 1;
} else if (f[n - m + 1 + kMaxM][x - 1] >= m - 1) {
int w = Print(n, m - 1, x - 1);
cout << "INSERT " << w << ' ' << t[m] << '\n';
return w + 1;
} else if (f[n - m - 1 + kMaxM][x - 1] >= m) {
int w = Print(n - 1, m, x - 1);
cout << "DELETE " << w << '\n';
return w;
} else if (s[n] != t[m]) {
int w = Print(n - 1, m - 1, x - 1);
cout << "REPLACE " << w << ' ' << t[m] << '\n';
return w + 1;
}
return Print(n - 1, m - 1, x) + 1;
}
int main() {
cin.tie(0), cout.tie(0);
ios::sync_with_stdio(0);
pw[0] = 1;
for (int i = 1; i < kMaxN; i++) {
pw[i] = pw[i - 1] * kBase % kMod;
}
cin >> o;
while (o--) {
cin >> n >> m >> k >> s >> t;
if (abs(n - m) > k) {
cout << "NO\n";
continue;
}
s = '~' + s, t = '~' + t;
for (int i = 1; i <= n; i++) {
hs[i] = (hs[i - 1] * kBase + s[i]) % kMod;
}
for (int i = 1; i <= m; i++) {
ht[i] = (ht[i - 1] * kBase + t[i]) % kMod;
}
for (int i = max(-k, -m); i <= min(k, n); i++) {
f[i + kMaxM][0] = min(-i, 0);
}
for (int &i = f[kMaxM][0]; i < n && i < m && s[i + 1] == t[i + 1]; i++) {
}
for (int x = 1; x <= k; x++) {
for (int i = max(-k, -m); i <= min(k, n); i++) {
int &p = f[i + kMaxM][x];
p = f[i + kMaxM][x - 1] + 1;
if (i > max(-k, -m)) {
p = max(p, f[i - 1 + kMaxM][x - 1]);
}
if (i < min(k, n)) {
p = max(p, f[i + 1 + kMaxM][x - 1] + 1);
}
if (p >= max(-i, 0)) {
int l = p + 1, r = min(n - i, m);
while (l <= r) {
int mid = l + r >> 1;
LL ws = hs[i + mid] - hs[i + p] * pw[mid - p] % kMod + kMod;
LL wt = ht[mid] - ht[p] * pw[mid - p] % kMod + kMod;
ws >= kMod && (ws -= kMod), wt >= kMod && (wt -= kMod);
ws == wt ? l = mid + 1 : r = mid - 1;
}
p = r;
} else {
p = min(p, min(n - i, m));
}
}
}
Print(n, m, W());
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 7ms
memory: 14872kb
input:
2 3 4 3 kot plot 5 7 3 zycie porazka
output:
YES 2 REPLACE 1 p INSERT 2 l NO
result:
ok OK!
Test #2:
score: 0
Accepted
time: 6ms
memory: 15424kb
input:
100 100 100 0 mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm 16 7 100 vvvvvvvvvvvvvvvv qydopaq 37 33 43 ggggggggggggggggggggggggggggggggggggg osk...
output:
YES 0 YES 16 REPLACE 1 q REPLACE 2 y REPLACE 3 d REPLACE 4 o REPLACE 5 p REPLACE 6 a REPLACE 7 q DELETE 8 DELETE 8 DELETE 8 DELETE 8 DELETE 8 DELETE 8 DELETE 8 DELETE 8 DELETE 8 YES 28 REPLACE 1 o REPLACE 2 s REPLACE 3 k REPLACE 5 m REPLACE 6 l REPLACE 8 j REPLACE 9 t REPLACE 10 u REPLACE 11 a REPLA...
result:
ok OK!
Test #3:
score: 0
Accepted
time: 657ms
memory: 22836kb
input:
100 3211 3185 685 wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...
output:
YES 552 REPLACE 4 i REPLACE 16 b REPLACE 17 s REPLACE 20 u REPLACE 29 j REPLACE 31 b REPLACE 33 z REPLACE 39 l REPLACE 67 l REPLACE 68 s REPLACE 70 i REPLACE 73 p REPLACE 91 g REPLACE 101 x REPLACE 111 y REPLACE 113 x REPLACE 115 s REPLACE 117 f REPLACE 121 m REPLACE 123 a REPLACE 130 h REPLACE 132 ...
result:
ok OK!
Test #4:
score: 0
Accepted
time: 720ms
memory: 39456kb
input:
5 999000 998976 995 llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll...
output:
YES 894 REPLACE 1682 u REPLACE 2752 y REPLACE 2983 z REPLACE 4433 b REPLACE 7318 m REPLACE 8237 b REPLACE 8898 n REPLACE 9049 m REPLACE 9504 n REPLACE 9903 n REPLACE 13572 q REPLACE 14221 v REPLACE 14615 y REPLACE 16903 j REPLACE 17197 e REPLACE 18073 v REPLACE 19408 b REPLACE 20512 p REPLACE 21033 ...
result:
ok OK!
Test #5:
score: 0
Accepted
time: 714ms
memory: 38292kb
input:
5 999000 998971 1000 lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll...
output:
NO NO NO NO NO
result:
ok OK!
Test #6:
score: 0
Accepted
time: 258ms
memory: 39408kb
input:
5 1000000 1000000 1000 faafaffaaffafaafaffafaaffaafaffaaffafaaffaafaffafaafaffaaffafaafaffafaaffaafaffafaafaffaaffafaaffaafaffaaffafaafaffafaaffaafaffaaffafaaffaafaffafaafaffaaffafaaffaafaffaaffafaafaffafaaffaafaffafaafaffaaffafaafaffafaaffaafaffaaffafaaffaafaffafaafaffaaffafaafaffafaaffaafaffafaafa...
output:
YES 246 INSERT 1 a REPLACE 3 f INSERT 7 a INSERT 13 a INSERT 15 f INSERT 25 a INSERT 27 f INSERT 29 f INSERT 31 a INSERT 49 a INSERT 51 f INSERT 53 f INSERT 55 a INSERT 57 f INSERT 59 a INSERT 61 a INSERT 63 f INSERT 97 a REPLACE 99 f INSERT 103 a DELETE 109 REPLACE 111 f DELETE 114 INSERT 129 f REP...
result:
ok OK!
Test #7:
score: 0
Accepted
time: 842ms
memory: 38320kb
input:
5 999900 999925 992 ejqwvowvntrtmokrfeqeybcvgsupftozhkdsyytrioxrzbahikexefgyhpwbcztcydqiibxukojvgedldgmjufkzwttpvftctkpajgpwiklfzrkjxzsltqdbfdyxqpswrrlkdbmwckbhbfpqqgnhcixcnmphjulyykqfvdrqsdskbxqlqvekhwmvzmtqannmxrjgqcpdpofmqozyicaiqjikqxkeolandjydgvtjhnzubpdtkxymaxffnopnnrpnedobnfljcvtqwmuxdctutidm...
output:
YES 938 DELETE 1984 DELETE 2243 INSERT 4441 b DELETE 5841 DELETE 6398 INSERT 6785 b REPLACE 6948 t INSERT 6988 g REPLACE 7101 b INSERT 7373 b DELETE 10782 INSERT 12028 g REPLACE 13721 g INSERT 14908 t DELETE 14925 INSERT 15582 b REPLACE 17831 b INSERT 19811 b DELETE 22361 REPLACE 22445 t INSERT 2508...
result:
ok OK!