Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions library/strings/wildcard_pattern_matching.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
//! s_vec[i]=0 or t_vec[i]=0 for a wildcard
//! @time O((n+m) log (n+m))
//! @space O(n+m)
using vl = vector<ll>;
vector<vl> make_powers(const vl& v) {
int n = sz(v);
vector<vl> pws(3, vl(n));
Expand Down
4 changes: 2 additions & 2 deletions tests/library_checker_aizu_tests/strings/kmp.test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ int main() {
cin.tie(0)->sync_with_stdio(0);
string haystack, needle;
cin >> haystack >> needle;
KMP kmp(needle);
vector<bool> is_m = kmp.find_str(haystack);
KMP kmp(vi(all(needle)));
vector<bool> is_m = kmp.find_str(vi(all(haystack)));
for (int i = 0; i < sz(is_m); i++)
if (is_m[i]) cout << i << '\n';
return 0;
Expand Down
4 changes: 2 additions & 2 deletions tests/library_checker_aizu_tests/strings/lcp_array.test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ int main() {
string s;
cin >> s;
int n = sz(s);
auto [sa, sa_inv, lcp] = get_sa(s, 256);
auto [sa1, sa_inv1, lcp1] = sa_short(s);
auto [sa, sa_inv, lcp] = get_sa(vi(all(s)), 256);
auto [sa1, sa_inv1, lcp1] = sa_short(vi(all(s)));
assert(sa == sa1);
assert(sa_inv == sa_inv1);
assert(lcp == lcp1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ int main() {
cin >> s;
int n = sz(s);
s = s + '$' + string(rbegin(s), rend(s));
auto [sa, sa_inv, lcp] = get_sa(s, 256);
sa_query lq(s, sa, sa_inv, lcp);
auto [sa, sa_inv, lcp] = get_sa(vi(all(s)), 256);
sa_query lq(vi(all(s)), sa, sa_inv, lcp);
for (int i = 0; i < n; i++)
for (int j = i; j < min(i + 2, n); j++)
cout << lq.len_lcp(j, (n - i - 1) + n + 1) * 2 -
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ int main() {
cin.tie(0)->sync_with_stdio(0);
string s;
cin >> s;
auto [sa, sa_inv, lcp] = get_sa(s, 256);
sa_query lq(s, sa, sa_inv, lcp);
auto [sa, sa_inv, lcp] = get_sa(vi(all(s)), 256);
sa_query lq(vi(all(s)), sa, sa_inv, lcp);
// test `*_cmp` functions
{
for (int num_tests = 50; num_tests--;) {
Expand Down
2 changes: 1 addition & 1 deletion tests/library_checker_aizu_tests/strings/lcs_dp.test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ int main() {
cin >> s >> t;
array<int, 2> res;
for (int j = 0; j < 2; j++) {
lcs_dp lcs(t);
lcs_dp lcs(vi(all(t)));
for (char c : s) lcs.push_onto_s(c);
res[j] = int(count(begin(lcs.dp), end(lcs.dp), -1));
swap(s, t);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ int main() {
cin >> a >> b >> c;
queries[i] = {a, b, c};
}
vector<int> res = lcs_queries(s, t, queries);
vector<int> res =
lcs_queries(vi(all(s)), vi(all(t)), queries);
for (int val : res) cout << val << '\n';
return 0;
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ int main() {
cin >> q >> s >> t;
vector<merge_sort_tree> msts;
{
lcs_dp lcs(t);
lcs_dp lcs(vi(all(t)));
msts.emplace_back(lcs.dp);
for (char c : s) {
lcs.push_onto_s(c);
Expand Down
2 changes: 1 addition & 1 deletion tests/library_checker_aizu_tests/strings/manacher.test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ int main() {
string s;
cin >> s;
int n = sz(s);
pal_query pq(s);
pal_query pq(vi(all(s)));
vector<int> longest(longest_from_index(pq));
{
vector<pair<int, int>> tests;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ int main() {
cin.tie(0)->sync_with_stdio(0);
string s;
cin >> s;
auto [sa, sa_inv, lcp] = get_sa(s, 256);
sa_query sf_a(s, sa, sa_inv, lcp);
auto [sa, sa_inv, lcp] = get_sa(vi(all(s)), 256);
sa_query sf_a(vi(all(s)), sa, sa_inv, lcp);
{
auto [sa_le, sa_ri, s_l, s_r] =
sf_a.find_str_fast(string(""));
pair<int, int> short_res = sf_a.find_str(string(""));
sf_a.find_str_fast(vi());
pair<int, int> short_res = sf_a.find_str(vi());
assert(sa_le == short_res.first &&
sa_ri == short_res.second);
assert(sa_le == 0 && sa_ri == sz(s));
Expand All @@ -25,8 +25,9 @@ int main() {
while (q--) {
string t;
cin >> t;
auto [sa_le, sa_ri, s_l, s_r] = sf_a.find_str_fast(t);
pair<int, int> short_res = sf_a.find_str(t);
auto [sa_le, sa_ri, s_l, s_r] =
sf_a.find_str_fast(vi(all(t)));
pair<int, int> short_res = sf_a.find_str(vi(all(t)));
assert(sa_le == short_res.first &&
sa_ri == short_res.second);
int str_len = s_r - s_l;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ int main() {
string s;
cin >> s;
int n = sz(s);
vector<int> pi = prefix_function(s);
vector<int> pi = prefix_function(vi(all(s)));
// prefix -> z func conversion
// source:
// https://codeforces.com/blog/entry/9612#comment-217621
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,20 @@ int main() {
cin.tie(0)->sync_with_stdio(0);
string s, t;
cin >> s >> t;
auto [sa, sa_inv, lcp] = get_sa(s, 256);
sa_query sf_a(s, sa, sa_inv, lcp);
auto [sa, sa_inv, lcp] = get_sa(vi(all(s)), 256);
sa_query sf_a(vi(all(s)), sa, sa_inv, lcp);
{
auto [sa_le, sa_ri, s_l, s_r] =
sf_a.find_str_fast(string(""));
sf_a.find_str_fast(vi());
assert(sa_le == 0 && sa_ri == sz(s));
pair<int, int> short_res = sf_a.find_str(string(""));
pair<int, int> short_res = sf_a.find_str(vi());
assert(sa_le == short_res.first &&
sa_ri == short_res.second);
assert(s_r - s_l == 0);
}
auto [sa_le, sa_ri, s_l, s_r] = sf_a.find_str_fast(t);
pair<int, int> short_res = sf_a.find_str(t);
auto [sa_le, sa_ri, s_l, s_r] =
sf_a.find_str_fast(vi(all(t)));
pair<int, int> short_res = sf_a.find_str(vi(all(t)));
assert(
sa_le == short_res.first && sa_ri == short_res.second);
int str_len = s_r - s_l;
Expand All @@ -39,8 +40,9 @@ int main() {
string both = s + '$' + t;
int t_start = sz(s) + 1;
auto [both_sa, both_sa_inv, both_lcp] =
get_sa(both, 256);
sa_query lq_both(both, both_sa, both_sa_inv, both_lcp);
get_sa(vi(all(both)), 256);
sa_query lq_both(vi(all(both)), both_sa, both_sa_inv,
both_lcp);
vector<vector<pii>> tests;
if (sz(t) >= 2)
tests.push_back({{t_start, t_start + 1},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
int main() {
cin.tie(0)->sync_with_stdio(0);
{
string s = "a";
vi s(1, 'a');
auto [_, _sa_inv, lcp] = get_sa(s, 256);
assert(empty(lcp));
}
string s;
cin >> s;
int n = sz(s);
auto [sa, sa_inv, lcp] = get_sa(s, 256);
sa_query sf_a(s, sa, sa_inv, lcp);
auto [sa, sa_inv, lcp] = get_sa(vi(all(s)), 256);
sa_query sf_a(vi(all(s)), sa, sa_inv, lcp);
mono_st_asserts(lcp);
assert(sz(sa) == n);
assert(sz(sa_inv) == n);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ int main() {
cin.tie(0)->sync_with_stdio(0);
string s;
cin >> s;
auto [sa, sa_inv, _] = sa_short(s);
auto [sa, sa_inv, _] = sa_short(vi(all(s)));
for (int i = 0; i < sz(s); i++) {
assert(sa[sa_inv[i]] == i);
assert(sa_inv[sa[i]] == i);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#define PROBLEM \
"https://judge.yosupo.jp/problem/wildcard_pattern_matching"
#include "../template.hpp"
using vl = vector<ll>;
#include "../../../library/strings/wildcard_pattern_matching.hpp"
namespace ignore {
#include "../../../kactl/content/number-theory/ModPow.h"
Expand Down
Loading