我在本地测试没出过问题,但是放到oj系统上就runtime error,错误代码11。
应该是访问到未定义的内存,可是我查了好久都没找到哪里越界了,求指教
#include <cstdio>
#define Length 1600050
struct StacketNode
{
int data;
StacketNode* next;
};
class Stacket
{
private: int _size;
StacketNode* Bottom;
StacketNode* Top;
public:
Stacket();
~Stacket();
void Push(int tra);
int Pop();
int GetTop();
private:
};
Stacket::Stacket()
{
Bottom = new StacketNode();
Bottom->data = 0;
Top = Bottom;
_size = 0;
}
void Stacket::Push(int tra)
{
StacketNode* temp = new StacketNode();
temp->data = tra;
temp->next = Top;
Top = temp;
_size++;
return;
}
int Stacket::Pop()
{
StacketNode* temp;
int temint;
temp = Top;
temint = temp->data;
Top = Top->next;
Top->next;
delete temp;
_size--;
return temint;
}
int Stacket::GetTop()
{
return Top->data;
}
int main()
{
int n = 0, m = 0, b = 0, t = 0;
int trains[Length];
bool Isfeasible = true;
scanf("%d %d",&n,&m);
int Seq[Length];
Stacket* A = new Stacket();
Stacket* B = new Stacket();
for (int i = 0; i < n; i++)
{
scanf("%d", &trains[i]);
A->Push(n-i);
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (B->GetTop() == trains[i])
{
B->Pop();
Seq[t++] = 1;
b--;
break;
}
else if(A->GetTop() == 0)
{
Isfeasible = false;
break;
}
else
{
if (++b <= m)
{
B->Push(A->Pop());
Seq[t++] = 0;
}
else
{
Isfeasible = false;
break;
}
}
if (Isfeasible == false)
break;
}
}
if (Isfeasible == false)
printf("No\n");
else
{
for (int i = 0; i < t; i++)
{
switch (Seq[i])
{
case 0:
printf("push\n");
break;
case 1:
printf("pop\n");
}
}
}
return 0;
}
补充OJ问题:
描述
某列车调度站的铁道联接结构如Figure 1所示。
其中,A为入口,B为出口,S为中转盲端。所有铁道均为单轨单向式:列车行驶的方向只能是从A到S,再从S到B;另外,不允许超车。因为车厢可在S中驻留,所以它们从B端驶出的次序,可能与从A端驶入的次序不同。不过S的容量有限,同时驻留的车厢不得超过m节。
设某列车由编号依次为{1, 2, ..., n}的n节车厢组成。调度员希望知道,按照以上交通规则,这些车厢能否以{a1, a2, ..., an}的次序,重新排列后从B端驶出。如果可行,应该以怎样
的次序操作?
输入
共两行。
第一行为两个整数n,m。
第二行为以空格分隔的n个整数,保证为{1, 2, ..., n}的一个排列,表示待判断可行性的驶出序列{a1,a2,...,an}。
输出
若驶出序列可行,则输出操作序列,其中push表示车厢从A进入S,pop表示车厢从S进入B,每个操作占一行。
若不可行,则输出No。
样例
见英文题面
限制
1 ≤ n ≤ 1,600,000
0 ≤ m ≤ 1,600,000
时间:2 sec
空间:256 MB
Example 1
Input
5 2
1 2 3 5 4
Output
push
pop
push
pop
push
pop
push
push
pop
pop
Example 2
Input
5 5
3 1 2 4 5
Output
No