Skip to content

Commit 31974ee

Browse files
committed
saving progress
1 parent 1e59c9e commit 31974ee

File tree

9 files changed

+40
-154
lines changed

9 files changed

+40
-154
lines changed

library/graphs/dijkstra.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
//! d[v] = min dist from source->..->v
66
//! @time O(n + (m log m))
77
//! @space O(n + m)
8-
vector<ll> dijkstra(
9-
const vector<vector<pair<int, ll>>>& adj, int s) {
8+
template <class G> vector<ll> dijkstra(const G& adj, int s) {
109
using p = pair<ll, int>;
1110
priority_queue<p, vector<p>, greater<>> pq;
1211
pq.emplace(0, s);

library/graphs/hopcroft_karp.hpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,11 @@
1212
//! mvc_r[r] is 1 if r in Min Vertex Cover
1313
//! @time O(n + m * sqrt(n)) n = lsz + rsz
1414
//! @space O(n)
15-
struct hopcroft_karp {
15+
template <class G> struct hopcroft_karp {
1616
int m_sz = 0;
1717
vi to_r, to_l;
1818
vector<bool> mvc_l, mvc_r;
19-
hopcroft_karp(const vector<vi>& adj, int rsz):
20-
to_r(sz(adj), -1), to_l(rsz, -1) {
19+
hopcroft_karp(const G& adj, int rsz) : to_r(sz(adj), -1), to_l(rsz, -1) {
2120
int lsz = sz(adj);
2221
while (1) {
2322
queue<int> q;
@@ -46,7 +45,7 @@ struct hopcroft_karp {
4645
for (int u : adj[v]) {
4746
int w = to_l[u];
4847
if (w == -1 ||
49-
(level[v] + 1 == level[w] && self(self, w))) {
48+
(level[v] + 1 == level[w] && self(self, w))) {
5049
to_r[v] = u;
5150
to_l[u] = v;
5251
return 1;
@@ -56,7 +55,7 @@ struct hopcroft_karp {
5655
return 0;
5756
};
5857
rep(i, 0, lsz) m_sz +=
59-
(to_r[i] == -1 && dfs(dfs, i));
58+
(to_r[i] == -1 && dfs(dfs, i));
6059
}
6160
}
6261
};
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
#pragma once
22
#include "prefix_function.hpp"
33
//! @code
4+
//! string s,t;
45
//! KMP kmp(t);
56
//! auto match = kmp.find_str(s);
7+
//! vi s_vec,t_vec;
8+
//! KMP kmp2(t_vec);
9+
//! auto match2 = kmp2.find_str(s_vec);
610
//! @endcode
711
//! if match[i] == 1 then s[i,sz(t)) == t
812
//! @time O(|s| + |t|)
913
//! @space O(|s| + |t|)
1014
// NOLINTNEXTLINE(readability-identifier-naming)
11-
template<class T> struct KMP {
15+
template <class T> struct KMP {
1216
T t;
1317
vi pi;
14-
KMP(const T& t): t(t), pi(prefix_function(t)) {}
18+
KMP(const T& t) : t(t), pi(prefix_function(t)) {}
1519
vector<bool> find_str(const T& s) {
1620
vector<bool> is_m(sz(s));
1721
int j = 0;

library/strings/manacher/manacher.hpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
#pragma once
22
//! https://codeforces.com/blog/entry/12143#comment-324162
33
//! @code
4-
//! auto man = manacher(s);
4+
//! string s6;
5+
//! auto man = manacher(s6);
6+
//! vi s_vec6;
7+
//! auto man2 = manacher(s_vec6);
58
//! @endcode
69
//!
710
//! man[center] = index of start of longest
@@ -13,16 +16,16 @@
1316
//!
1417
//! @time O(n)
1518
//! @space O(n)
16-
template<class T> vi manacher(const T& s) {
19+
template <class T> vi manacher(const T& s) {
1720
int n = sz(s), p = 0;
1821
vi man(max(0, 2 * n - 1));
1922
rep(i, 0, 2 * n - 1) {
2023
int r = i <= 2 * (p - man[p])
21-
? p - max(man[2 * p - i], man[p])
22-
: i / 2;
24+
? p - max(man[2 * p - i], man[p])
25+
: i / 2;
2326
man[i] = i - r;
2427
while (
25-
man[i] > 0 && r + 1 < n && s[man[i] - 1] == s[r + 1])
28+
man[i] > 0 && r + 1 < n && s[man[i] - 1] == s[r + 1])
2629
man[i]--, r++, p = i;
2730
}
2831
return man;

library/strings/suffix_array/suffix_array.hpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,17 @@
2525
//! lcp = {1, 3, 0, 0, 2}
2626
//!
2727
//! @code
28-
//! auto [sa, sa_inv, lcp] = get_sa(s, 256);
28+
//! string s1;
29+
//! auto [sa, sa_inv, lcp] = get_sa(s1, 256);
30+
//! vi s_vec1;
31+
//! auto [sa1, sa_inv1, lcp1] = get_sa(s_vec1, 100'001);
2932
//! @endcode
3033
//!
3134
//! requires 0<=s[i]<max_num
3235
//!
3336
//! @time O(nlogn + max_num)
3437
//! @space O(n + max_num)
35-
template<class T>
38+
template <class T>
3639
array<vi, 3> get_sa(const T& s, int max_num) {
3740
int n = sz(s);
3841
vi sa(n), sa_inv(all(s)), lcp(n - 1);
@@ -41,7 +44,7 @@ array<vi, 3> get_sa(const T& s, int max_num) {
4144
vi y(sa_inv), freq(max_num);
4245
iota(all(sa_inv), n - i);
4346
ranges::copy_if(sa, begin(sa_inv) + i,
44-
[&](int& x) { return (x -= i) >= 0; });
47+
[&](int& x) { return (x -= i) >= 0; });
4548
for (int x : y) freq[x]++;
4649
partial_sum(all(freq), begin(freq));
4750
for (int x : sa_inv | views::reverse)

library/strings/suffix_array/suffix_array_query.hpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,20 @@
33
#include "../../data_structures/rmq.hpp"
44
#include "find/match.hpp"
55
//! @code
6-
//! auto [sa1, sa_inv1, lcp1] = get_sa(s, 256);
7-
//! sa_query saq(s, sa1, sa_inv1, lcp1);
6+
//! string s3;
7+
//! auto [sa4, sa_inv4, lcp4] = get_sa(s3, 256);
8+
//! sa_query saq(s, sa4, sa_inv4, lcp4);
9+
//! vi s_vec3;
10+
//! auto [sa5, sa_inv5, lcp5] = get_sa(s_vec3, 100'001);
11+
//! sa_query saq2(s_vec3, sa5, sa_inv5, lcp5);
812
//! @endcode
9-
template<class T> struct sa_query {
13+
template <class T> struct sa_query {
1014
int n;
1115
T s;
1216
vi sa, sa_inv, lcp;
1317
RMQ<int, function<int(int, int)>> rmq;
1418
sa_query(const T& s, const vi& sa, const vi& sa_inv,
15-
const vi& lcp):
16-
n(sz(s)), s(s), sa(sa), sa_inv(sa_inv), lcp(lcp),
17-
rmq(lcp, ranges::min) {}
19+
const vi& lcp) : n(sz(s)), s(s), sa(sa), sa_inv(sa_inv), lcp(lcp), rmq(lcp, ranges::min) {}
1820
//! returns max integer k such that
1921
//! s.substr(i1, k) == s.substr(i2, k)
2022
//! @time O(1)

library/strings/suffix_array/suffix_array_short.hpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22
//! https://github.com/atcoder/ac-library/blob/master/atcoder/string.hpp
33
//! @code
44
//! // requires s[i]>=0
5-
//! auto [sa2, sa_inv2, lcp2] = sa_short(s);
5+
//! string s2;
6+
//! auto [sa2, sa_inv2, lcp2] = sa_short(s2);
7+
//! vi s_vec2;
8+
//! auto [sa3, sa_inv3, lcp3] = sa_short(s_vec2);
69
//! @endcode
710
//! runs in ~1.5s for 5e5
811
//! @time O(n * log^2(n))
912
//! @space O(n)
10-
template<class T> array<vi, 3> sa_short(const T& s) {
13+
template <class T> array<vi, 3> sa_short(const T& s) {
1114
int n = sz(s);
1215
vi sa(n), sa_inv(all(s)), lcp(n - 1);
1316
iota(all(sa), 0);
@@ -19,7 +22,7 @@ template<class T> array<vi, 3> sa_short(const T& s) {
1922
ranges::sort(sa, {}, proj);
2023
sa_inv[sa[0]] = 0;
2124
rep(i, 1, n) sa_inv[sa[i]] =
22-
sa_inv[sa[i - 1]] + (proj(sa[i - 1]) != proj(sa[i]));
25+
sa_inv[sa[i - 1]] + (proj(sa[i - 1]) != proj(sa[i]));
2326
}
2427
int sz = 0;
2528
rep(i, 0, n) {

tests/library_checker_aizu_tests/handmade_tests/string_with_vector.test.cpp

Lines changed: 0 additions & 124 deletions
This file was deleted.

tests/scripts/compile_commented_snippets.sh

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,18 @@ git submodule update
1717
echo "int main() {"
1818
echo "vi a,b,subset;"
1919
echo "vl left,bottom,s_vec,t_vec;"
20-
echo "vector<vi> adj;"
21-
echo "vector<vector<pair<int,ll>>> adj_w;"
2220
echo "vector<pii> edges;"
2321
echo "vector<array<int,2>> eds;"
2422
echo "vector<array<int,3>> w_eds;"
2523
echo "vector<mint> rhs;"
2624
echo "vector<vector<mint>> mat;"
2725
echo "vector<vector<bool>> grid;"
28-
echo "string s,t;"
2926
echo "int n,m,k,tl,tr,l,r,l1,r1,l2,r2,s_l,s_r,root_l,root_r,source,sink,total_flow,bccid,u,v,rsz,cols,cap;"
3027
} >entire_library_without_main
3128

3229
{
3330
cat entire_library_without_main
34-
sed --quiet '/\/\/! @code$/,/\/\/! @endcode$/{//!p;}' entire_library_without_main | sed 's/\/\/!//'
31+
sed --quiet '/\/\/! @code$/,/\/\/! @endcode$/p' entire_library_without_main | sed 's/\/\/! @code/{/' | sed 's/\/\/! @endcode/}/' | sed 's/\/\/!//'
3532
echo "return 0;"
3633
echo "}"
3734
} >entire_library.cpp

0 commit comments

Comments
 (0)