- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
fstream in("z.in", ios::in);
fstream out("z.out", ios::out);
string s;
in >> s;
in.close();
vector<size_t> z(s.length());
z[0] = s.length();
for (size_t i = 1, l = 0, r = 0, j = 0, k = 0; i < s.length(); (i > r) ? ((s[i + j] == s[j]) && ((j + i) < s.length()) ? ++j : (((z[l = i] = j, r = i + j - 1), j = 0), ++i)) : ((z[i - l] < r - i + 1) ? ((z[i] = z[i - l]), ++i) : (((s[r + k] == s[r - i + k]) && ((k + r) < s.length())) ? ++k : (((z[l = i] = r - i + k, r = r + k - 1), k = 1), ++i))));
for(size_t i = 1; i < s.length(); ++i)
{
out << z[i] << " ";
}
out << flush;
out.close();
return 0;
}
Z-функция в одну строчку. плод больного воображения и лишнего времени