1 / 1
Dec 2022

Hi, this is my code. Not sure what I am doing wrong in this code. But I am getting this error - runtime error (SIGABRT). Can someone please help me to sort out this?

   #include <bits/stdc++.h>
    using namespace std;
    // #define ll long long int
    #define int long long
    #define FOR(i,a,b) for(int i=a; i<b; i++)
    const int N = 600006, mod =  1110111110111;
    int  base[N];
    set<int> st;
    int a[100008];
    struct manacher {
        vector<int> p;        
        void runManacher(string s) {
            int n = s.length();
            p.assign(n ,1);
               int l = 1, r = 1;
            for(int i = 1; i <= n; i++) {
                p[i] = max((int)0, min(r - i, p[l + (r - i)]));
                while(s[i - p[i]] == s[i + p[i]]) {
                    p[i]++;
                }
                if(i + p[i] > r) {
                    l = i - p[i], r = i + p[i];
                }
            }
            int count = 0;
            for (int i = 0; i < n;i++) {
                int temp = p[i] - 1;
                while (temp > 0) {
                    count++;
                    temp -= 2;
                }
            }
            // cout<<endl;
            cout<<count;
        }
        void buildString(string s) {
            string t;
            for (auto c: s)
            t+= string("#") + c;
            t+= "#";
            runManacher(t);
        }
    } m;
    vector<int> calculate_z_array(string s) {
        int n=s.length();
        vector<int> z(n);
        z[0]=n;
        int l=0,r=0;
        for(int i=1;i<n;i++)
        {
           if (i > r) {
               l = r = i;
               while (r < n && s[r] == s[r-l])
               r++;
               z[i] = r-l;
               r--;
           }
           else {
               int ind = i-l;
               if (z[ind] < (r-i+1)) {
                   z[i] = z[ind];
               }
               else {
                   l = i;
                   while (r < n && s[r] == s[r-l])
                   r++;
                   z[i] = r- l;
                   r--;
               }
           }
        }
        return z;
    }
    vector<pair<int,int>> kmpFunction(string &s) {
        vector<int>res(s.length());
        vector<int>dp(s.length());
        int n = s.length();
        for (int i = 1; i < s.length(); i++) {
            int j = res[i-1];
            while (j > 0 && s[i] != s[j])
            j = res[j-1];
            if (s[i] == s[j])
            j++;
            res[i] = j;
            dp[j]++;
        }
        for (int i = n-1; i >=1; i--)
        dp[res[i-1]] += dp[i];
        vector<pair<int,int>> ans;
        for (int i = res[n-1]; i!= 0 ; i = res[i-1]) {
            ans.push_back({i,dp[i]});
        }
        return ans;
    }
    void solve()
    {
    string s;
    cin>>s;
     m.buildString(s);
    }
    
    int32_t  main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int TESTS = 1;
    // cin>>TESTS;
     while(TESTS--){
        solve();
        cout<<endl;
          }
        return 0;
    }