我正在尝试解决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”。
答案 0 :(得分:0)
while(true)
中有一个无限循环
什么时候:
temp != n+1
s.empty()
是假s.top() !=temp
也许还有其他错误...