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;
}