Почему я получаю ошибку SIGTSTP даже для небольших входов? - PullRequest
0 голосов
/ 28 ноября 2018

Я пытался решить эту проблему https://www.spoj.com/problems/STPAR/ на спой.Я написал код согласно моим знаниям.Но я не знаю, почему я получаю эту ошибку.Пожалуйста, помогите мне разобраться с ошибкой в ​​моем коде.Заранее спасибо !!!

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    while(n!=0)
    {
        int i,arr[n];
        for(i=0;i<n;i++)
            cin>>arr[i];
        int temp=1;
        stack<int>s;
        i=0;
        while(arr[i]!=temp and i<n)
        {
            s.push(arr[i]);
            i++;
        }
        temp++;
        bool flag=false;
        while(true)
        {
            if(temp==n+1)
            {
                flag=true;
                break;
            }
            else if(!s.empty())
            {
                if(s.top()==temp)
                {
                    s.pop();
                    temp++;
                }
            }
            else if(i!=n-1)
            {
                if(arr[i+1]==temp)
                {
                    i++;
                    temp++;
                }
                else
                {
                    int j=i+1;
                    while(arr[j]!=temp and j<n)
                    {
                        s.push(arr[j]);
                        j++;
                    }
                    i=j-1;
                }
            }
            else if(!s.empty())
            {
                if((s.top()!=temp) and ((i!=n-1) and (arr[i+1]!=temp)))
                    break;
            }
        }
        if(flag)
            cout<<"yes";
        else
            cout<<"no";
        if(n)
            cout<<"\n";
        cin>>n;
    }
    return 0;

}

Ввод был: 5 5 1 2 4 3 0

Вот форматы ввода и вывода:

Вход Есть несколько тестовых случаев.Первая строка каждого теста содержит одно число n - количество мобильных телефонов.Вторая строка содержит числа от 1 до n в произвольном порядке.Все числа разделены одним пробелом.Эти цифры указывают порядок, в котором грузовики прибывают на подъездную улицу.В уличном параде участвуют не более 1000 мобильных телефонов.Ввод заканчивается цифрой 0.

Выход Для каждого тестового примера ваша программа должна вывести строку, содержащую одно слово «да», если мобильные телефоны можно переупорядочить с помощьюпереулок, и одно слово «нет» в противоположном случае.

1 Ответ

0 голосов
/ 28 ноября 2018

У вас есть бесконечный цикл в while(true), когда:

  • temp != n+1
  • И s.empty() ложно
  • И s.top() !=temp

Возможно, есть другие ошибки ...

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