Зачем объявлять вектор глобально и инициализировать в локальной функции, давая исключение времени выполнения? - PullRequest
0 голосов
/ 18 апреля 2020

Я решал какой-то вопрос об отслеживании на онлайн-платформе. Вот мой код

vector<vector<int> > dp;     // STATEMENT 1
//vector<vector<int> > dp(1000, vector<int>(1000,0)); // STATEMENT 2
void initialize_dp(string stg)
{
    int n = stg.length();
    for(int i = 0; i < n; i++)
    {
        dp.push_back(vector<int>(n,0)); // STATEMENT 3
    }
    for(int i = 0 ;i <n ;i++)
        dp[i][i] = 1;
    for(int len = 2; len <= n; len++)
    {
        for(int i = 0, j = i+len-1; i < n && j < n; i++, j++)
        {
            if(stg[i] == stg[j])
            {   
                if(len == 2)
                    dp[i][j] = 1;
                else
                    dp[i][j] = dp[i+1][j-1];
            }
            else 
                dp[i][j] = 0;
        }
    }
}
void solve(string &A, int n, int k, vector<vector<string> >&result, vector<string> temp)
{
    if(k == n)
    {
        result.push_back(temp);
        return;
    }
    int i,j;
    i = k;
    for(int j = k; j < n; j++)
    {
        if(dp[i][j] == 1)
        {
            temp.push_back(A.substr(i, j-i+1));
            solve(A, n, j+1, result, temp);
            temp.pop_back();
        }
    }
}
vector<vector<string> > startFunction(string A) {
    int n = A.length();
    initialize_dp(A);
    vector<vector<string> > result;
    vector<string> temp;
    solve(A, n,0, result, temp);
    return result;
}

В коде я объявил глобально vector<vector<int> >, когда объявил, что с помощью STATEMENT2 он работает нормально. Но когда я объявил это, используя STATEMENT1 и внутреннюю функцию initialize_dp (string stg) Я инициализирую этот глобальный вектор в STATEMENT3 , тогда он показывает исключение времени выполнения при отправке. Однако на моей локальной машине он работает нормально с входами, которые не удалось на онлайн-платформе. Любая идея, что могло бы сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...