Advertisement
MinhNGUYEN2k4

CPREFIX || Z function

Sep 9th, 2020
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. #define FAST ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
  4. #define Task "CPREFIX"
  5. #define READFILE freopen(Task".INP", "r", stdin)
  6. #define WRITEFILE freopen(Task".OUT", "w", stdout)
  7. using namespace std;
  8. typedef vector < int > vi;
  9. string a;
  10. void init(){
  11.     FAST;
  12.     //READFILE;
  13.     //WRITEFILE;
  14.     cin >> a;
  15. }
  16. void sol(){
  17.     int n = a.size();
  18.     a = " " + a;
  19.     vi z(n + 1, 0);
  20.     vi pre(n + 2, 0);
  21.     z[1] = 0;
  22.     for (int k = 2, l = 1, r = 1; k <= n; ++k)
  23.     {
  24.         int x = 0;
  25.         int kk = k - l + 1;
  26.         if (k <= r){
  27.             x = min(z[kk], r - k + 1);
  28.         }
  29.         while (k + x <= n && a[x + 1] == a[k + x]) ++x;
  30.         z[k] = x;
  31.         if (r < k + x - 1){
  32.             r = k + x - 1;
  33.             l = k;
  34.         }
  35.         pre[x]++;
  36.     }
  37.     for (int i = n; i >= 1; --i){
  38.         pre[i] += pre[i + 1];
  39.     }
  40.     for (int i = 1; i <= n; ++i){
  41.         cout << pre[i] + 1 << " ";
  42.     }
  43. }
  44. signed main(){
  45.     init();
  46.     sol();
  47.     return 0;
  48. }
  49.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement