为什么即使输入很小也会出现SIGTSTP错误?

时间:2018-11-28 12:07:17

标签: stack

我正在尝试解决spoj上的问题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结尾。

输出 对于每个测试用例,如果可以在小巷的帮助下重新排列爱心手机,则程序必须输出一行包含“ yes”的单词,而在相反的情况下,则输出一个单词“ no”。

1 个答案:

答案 0 :(得分:0)

while(true)中有一个无限循环 什么时候:

  • temp != n+1
  • s.empty()是假
  • 还有s.top() !=temp

也许还有其他错误...