This documentation is automatically generated by competitive-verifier/competitive-verifier
#define PROBLEM "https://judge.yosupo.jp/problem/zalgorithm"
#include "include/mtl/string/z_algorithm.hpp"
#include <iostream>
using namespace std;
int main() {
string s; cin>>s;
auto z = z_algorithm(s.begin(), s.end());
for (int i = 0; i < (int) s.size(); i++)
cout << z[i] << ' ';
cout << endl;
}
#line 1 "test/string/z_algorithm.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/zalgorithm"
#line 2 "include/mtl/string/z_algorithm.hpp"
#include <vector>
#include <iterator>
template<typename It>
std::vector<int> z_algorithm(It begin, It end) {
using trait = std::iterator_traits<It>;
static_assert(std::is_base_of<std::random_access_iterator_tag, typename trait::iterator_category>::value, "");
int n = end - begin;
std::vector<int> z(n);
z[0] = n;
int i = 1, j = 0;
while (i < n) {
while (i+j < n and *(begin + i+j) == *(begin + j))
++j;
if (j == 0) {
++i;
continue;
}
z[i] = j;
int k = 1;
while (k < j and k + z[k] < j) {
z[i+k] = z[k];
++k;
}
i += k;
j -= k;
}
return z;
}
#line 3 "test/string/z_algorithm.test.cpp"
#include <iostream>
using namespace std;
int main() {
string s; cin>>s;
auto z = z_algorithm(s.begin(), s.end());
for (int i = 0; i < (int) s.size(); i++)
cout << z[i] << ' ';
cout << endl;
}
Env | Name | Status | Elapsed | Memory |
---|---|---|---|---|
g++ | all_same_00 |
![]() |
41 ms | 6 MB |
g++ | all_same_01 |
![]() |
43 ms | 6 MB |
g++ | all_same_02 |
![]() |
42 ms | 6 MB |
g++ | all_same_03 |
![]() |
41 ms | 6 MB |
g++ | all_same_04 |
![]() |
42 ms | 6 MB |
g++ | binary_carry_00 |
![]() |
37 ms | 6 MB |
g++ | binary_carry_01 |
![]() |
37 ms | 6 MB |
g++ | example_00 |
![]() |
6 ms | 3 MB |
g++ | example_01 |
![]() |
5 ms | 3 MB |
g++ | example_02 |
![]() |
5 ms | 3 MB |
g++ | example_03 |
![]() |
5 ms | 3 MB |
g++ | fib_str_00 |
![]() |
38 ms | 6 MB |
g++ | fib_str_01 |
![]() |
30 ms | 5 MB |
g++ | fib_str_02 |
![]() |
30 ms | 5 MB |
g++ | fib_str_03 |
![]() |
27 ms | 5 MB |
g++ | fib_str_04 |
![]() |
39 ms | 6 MB |
g++ | hack606_00 |
![]() |
5 ms | 3 MB |
g++ | max_random_00 |
![]() |
39 ms | 6 MB |
g++ | max_random_01 |
![]() |
40 ms | 6 MB |
g++ | random_00 |
![]() |
32 ms | 5 MB |
g++ | random_01 |
![]() |
35 ms | 6 MB |
g++ | random_02 |
![]() |
9 ms | 4 MB |
g++ | random_03 |
![]() |
34 ms | 5 MB |
g++ | random_04 |
![]() |
23 ms | 5 MB |
g++ | random_05 |
![]() |
26 ms | 5 MB |
g++ | random_06 |
![]() |
35 ms | 6 MB |
g++ | random_07 |
![]() |
11 ms | 4 MB |
g++ | random_08 |
![]() |
23 ms | 5 MB |
g++ | random_09 |
![]() |
12 ms | 4 MB |
clang++ | all_same_00 |
![]() |
36 ms | 6 MB |
clang++ | all_same_01 |
![]() |
38 ms | 6 MB |
clang++ | all_same_02 |
![]() |
46 ms | 6 MB |
clang++ | all_same_03 |
![]() |
47 ms | 6 MB |
clang++ | all_same_04 |
![]() |
46 ms | 6 MB |
clang++ | binary_carry_00 |
![]() |
36 ms | 6 MB |
clang++ | binary_carry_01 |
![]() |
35 ms | 6 MB |
clang++ | example_00 |
![]() |
5 ms | 3 MB |
clang++ | example_01 |
![]() |
5 ms | 3 MB |
clang++ | example_02 |
![]() |
5 ms | 3 MB |
clang++ | example_03 |
![]() |
5 ms | 3 MB |
clang++ | fib_str_00 |
![]() |
33 ms | 6 MB |
clang++ | fib_str_01 |
![]() |
26 ms | 5 MB |
clang++ | fib_str_02 |
![]() |
25 ms | 5 MB |
clang++ | fib_str_03 |
![]() |
24 ms | 5 MB |
clang++ | fib_str_04 |
![]() |
33 ms | 6 MB |
clang++ | hack606_00 |
![]() |
6 ms | 3 MB |
clang++ | max_random_00 |
![]() |
34 ms | 6 MB |
clang++ | max_random_01 |
![]() |
36 ms | 6 MB |
clang++ | random_00 |
![]() |
27 ms | 5 MB |
clang++ | random_01 |
![]() |
32 ms | 6 MB |
clang++ | random_02 |
![]() |
8 ms | 4 MB |
clang++ | random_03 |
![]() |
29 ms | 5 MB |
clang++ | random_04 |
![]() |
21 ms | 5 MB |
clang++ | random_05 |
![]() |
23 ms | 5 MB |
clang++ | random_06 |
![]() |
30 ms | 6 MB |
clang++ | random_07 |
![]() |
11 ms | 4 MB |
clang++ | random_08 |
![]() |
20 ms | 5 MB |
clang++ | random_09 |
![]() |
11 ms | 4 MB |