#include "hieroglyphs.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ari2 = array<int, 2>;
using ari3 = array<int, 3>;
using arl2 = array<ll, 2>;
using arl3 = array<ll, 3>;
template <class T> using vt = vector<T>;
#define all(x) begin(x), end(x)
#define size(x) (int((x).size()))
#define REP(a,b,c,d) for(int a=(b);(d)>0?a<=(c):a>=(c);a+=(d))
#define FOR(a,b,c) REP(a,b,c,1)
#define ROF(a,b,c) REP(a,b,c,-1)
vt<int> ucs(vt<int> A, vt<int> B) {
const int N = size(A), M = size(B);
bool sub1 = N == M;
vt<int> temp = A;
sort(all(temp));
FOR(i, 0, N-1)
sub1 &= temp[i] == i;
temp = B;
sort(all(temp));
FOR(i, 0, M-1)
sub1 &= temp[i] == i;
if (sub1)
return A == B ? A : vt<int>{-1};
if (max(N, M) <= 3000) {
A.insert(A.begin(), 0);
B.insert(B.begin(), 0);
vt<vt<int>> dp(N+1, vt<int>(M+1));
vt<vt<pair<int, int>>> par(N+1, vt<pair<int, int>>(M+1));
FOR(i, 1, N)
FOR(j, 1, M) {
dp[i][j] = max({dp[i-1][j-1] + (A[i] == B[j]), dp[i-1][j], dp[i][j-1]});
if (A[i] == B[j] && dp[i-1][j-1] + 1 == dp[i][j])
par[i][j] = {i-1, j-1};
else if (dp[i-1][j] == dp[i][j])
par[i][j] = {i-1, j};
else
par[i][j] = {i, j-1};
}
vt<int> ans;
for (int i = N, j = M; i && j; ) {
const auto &[x, y] = par[i][j];
if (x < i && y < j) {
#ifdef DEBUG
cout << "added: " << i << ' ' << j << '\n';
#endif
ans.push_back(A[i]);
}
i = x, j = y;
}
reverse(all(ans));
constexpr int MAX = 200005;
vt<int> cnt_A(MAX), cnt_B(MAX);
FOR(i, 1, N)
cnt_A[A[i]]++;
FOR(i, 1, M)
cnt_B[B[i]]++;
int must = 0;
FOR(i, 0, MAX-1)
must += min(cnt_A[i], cnt_B[i]);
#ifdef DEBUG
cout << "must: " << must << '\n';
#endif
return size(ans) < must ? vt<int>{-1} : ans;
}
}
Compilation message (stderr)
hieroglyphs.cpp: In function 'vt<int> ucs(vt<int>, vt<int>)':
hieroglyphs.cpp:70:1: warning: control reaches end of non-void function [-Wreturn-type]
70 | }
| ^
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |