Language: C++

#include <bits/stdc++.h>

#define rep(X,N) for(ll X = 0; X < (N); X++)
#define PI (acos(-1.0))
#define pback push_back
#define mpair make_pair
#define MODN 1000000007
#define ALL(V) (V).begin(),(V).end()
#define INT_MAX_HALF (INT_MAX / 2)
#define EPS (1e-10)

using namespace std;
typedef long long ll;

map<string, int> m;

vector<vector<int>> manacher(string s){

    int size = s.size();
    int size2 = size * 2  - 1;
    //偶数長に対応するためダミー文字($)を文字間に入れた配列をつくる
    vector<char> sv(size2, '$');
    vector<int>  R2(size2);

    for(int i = 0; i < size; i++){
        sv[i * 2] = s[i];
    }

    int i = 0; //検証する文字の位置
    int j = 0; //文字の半径を表す数字

    while(i < size2){
        //調べる文字が文字の配列の範囲を越えていないかと中心から同じ距離離れた2つの文字が同じかどうか
        while(i - j >= 0 && i + j < size2 && sv[i - j] == sv[i + j]) j++;

        R2[i] = j;
        int k = 1;

        //iから左にj文字までは回文の内の左半分になっていることがわかっているので
        //R2[i - k]の値が大きくないうちはその値と回文の右半分として対応するR2[i + k]が同じになる
        while(i - k >= 0 && i + k < size2 && k + R2[i - k] < j){
            R2[i + k] = R2[i - k];
            k++;
        }

        //調べた分(k文字)だけ中央にあたるiの文字をずらす
        i += k;
        //上のwhileでk + R2[i - k]が大きくなり、対応出来なかった分についても
        //部分的には回文であることがわかっているのでj=0でなくてよい
        j -= k;
    }

    vector<vector<int>> R;

    vector<int> tmpv1(size);
    vector<int> tmpv2(size - 1);
    R.push_back(tmpv1);
    R.push_back(tmpv2);

    for(int i = 0; i < size; i++){
        R[0][i] = (R2[i * 2] + 1) / 2;
    }

    for(int i = 0; i < size - 1; i++){
        R[1][i] = R2[i * 2 + 1] / 2;
    }

    return  R;
}

int str2num(string s){

    int size = s.size();

    string s2 = s;
    reverse(ALL(s2));

    if(m.find(s) != m.end()){
        return m[s];
    }else if(m.find(s2) != m.end(){
        return m[s2];
    }

    if(size == 1){
        return (int)(s[0] - '0');
    }else if(size == 0){
        return 0;
    }


    vector<vector<int>> manacherv = manacher(s);

    int maxl = 0;
    int r = 0;
    int tmpi, tmpj;

    rep(i, size){
        if(maxl < manacherv[0][i]){
            maxl = manacherv[0][i] * 2 - 1;
            r = manacherv[0][i];

            tmpi = 0;
            tmpj = i;
        }else if(maxl == manacherv[0][i]){
            if(abs(tmpj - size / 2) > abs(i - size / 2)){
                tmpi = 0;
                tmpj = i;
            }
        }
    }

    rep(i, size - 1){
        if(maxl < manacherv[1][i]){
            maxl = manacherv[1][i] * 2;
            r = manacherv[1][i];

            tmpi = 1;
            tmpj = i;
        }else if(maxl == manacherv[1][i]){
            if(abs(tmpj - size / 2) > abs(i - size / 2)){
                tmpi = 0;
                tmpj = i;
            }
        }
    }

    if(maxl == 1 || maxl == 0 || maxl == 2){

        string tmps = "";

        rep(i, size - 1){
            tmps += (abs(s[i + 1] - s[i]) + '0');
        }

        return str2num(tmps);

    }else if(tmpi == 0){

        int index = tmpj - (r - 1);

        int tmp = abs(str2num(s.substr(0, index + 1)) - str2num(s.substr(index + maxl - 1)));
        m[s] = tmp;

        return tmp;
    }else{

        int index = tmpj - r + 1;

        int tmp = abs(str2num(s.substr(0, index + 1)) - str2num(s.substr(index + maxl - 1)));
        m[s] = tmp;

        return tmp;
    }
}


int main(){

    int n;
    string s;
    cin >> n;
    cin >> s;

    cout << str2num(s) << endl;

    return 0;
}


Compiler output:
a.cc: In function 'int str2num(std::string)':
a.cc:80:35: error: expected ';' before '{' token
   80 |     }else if(m.find(s2) != m.end(){
      |                                   ^
      |                                   ;
a.cc:84:5: error: expected primary-expression before 'if'
   84 |     if(size == 1){
      |     ^~
a.cc:82:6: error: expected ')' before 'if'
   82 |     }
      |      ^
      |      )
   83 | 
   84 |     if(size == 1){
      |     ~~
a.cc:80:13: note: to match this '('
   80 |     }else if(m.find(s2) != m.end(){
      |             ^
a.cc:98:19: error: 'manacherv' was not declared in this scope; did you mean 'manacher'?
   98 |         if(maxl < manacherv[0][i]){
      |                   ^~~~~~~~~
      |                   manacher
a.cc:113:19: error: 'manacherv' was not declared in this scope; did you mean 'manacher'?
  113 |         if(maxl < manacherv[1][i]){
      |                   ^~~~~~~~~
      |                   manacher