hdoj 1022 train problem 求助

bersaty 2011-08-20 10:11:42
小弟刚看完栈那块,做了道题,不知道错在哪里,老是WA,
我知道把整个代码贴出来让人找错很不道德,但没办法,
我自己找了很久找不出,请各位帮帮初学者我,


#include<iostream>
using namespace std;
int x[20],w;
struct stack
{
char data[20];
int top;
}s1;
int initstack(stack &s)
{
s.top=-1;
return 1;
}
int pop(stack &s)
{
x[w++]=0;
return s.data[s.top--];
}
int push(stack &s,int c)
{
s.data[++s.top]=c;
x[w++]=1;
return 1;
}
int isempty(stack s)
{
if(s.top==-1)
return 1;
return 0;
}
int main()
{
int n;
char a[10],b[10];
int j,t;
initstack(s1);
while(scanf("%d",&n)!=EOF)
{
j=0;
w=0;
t=1;
scanf("%s",a);
scanf("%s",b);
for(int q=0;q<n;q++)
{
if(isempty(s1))
{
push(s1,a[q]);
continue;
}
if(s1.data[s1.top]==b[j])
{
while(s1.data[s1.top]==b[j])
{
pop(s1);
j++;
}
push(s1,a[q]);
}
else
push(s1,a[q]);
if(j>n)
break;
}
while(j<n)
{
if(s1.data[s1.top]==b[j])
{
pop(s1);
j++;
}
else
{
t=0;
break;
}
}
if(t==0)
printf("No.\n");
else
{
cout<<"Yes."<<endl;
for(int i=0;i<2*n;i++)
if(x[i])
cout<<"in"<<endl;
else
cout<<"out"<<endl;
}
cout<<"FINISH"<<endl;
}
return 0;
}
...全文
123 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
logiciel 2011-08-24
  • 打赏
  • 举报
回复
如下修改AC:
#include<iostream>
using namespace std;
int x[20],w;
struct stack
{
char data[20];
int top;
}s1;
int initstack(stack &s)
{
s.top=-1;
return 1;
}
int pop(stack &s)
{
x[w++]=0;
return s.data[s.top--];
}
int push(stack &s,int c)
{
s.data[++s.top]=c;
x[w++]=1;
return 1;
}
int isempty(stack s)
{
if(s.top==-1)
return 1;
return 0;
}
int main()
{
int n;
char a[10],b[10];
int j,t;
//initstack(s1); 只做1次初始化将出现“Memory Limit Exceeded”错误
while(scanf("%d",&n)!=EOF)
{
initstack(s1);//移到这里
j=0;
w=0;
t=1;
scanf("%s",a);
scanf("%s",b);
for(int q=0;q<n;q++)
{
if(isempty(s1))
{
push(s1,a[q]);
continue;
}
if(s1.data[s1.top]==b[j])
{
while(!isempty(s1) && s1.data[s1.top]==b[j])//漏判栈非空 while(s1.data[s1.top]==b[j])
{
pop(s1);
j++;
}
push(s1,a[q]);
}
else
push(s1,a[q]);
if(j>n)
break;
}
while(j<n)
{
if(s1.data[s1.top]==b[j])
{
pop(s1);
j++;
}
else
{
t=0;
break;
}
}
if(t==0)
printf("No.\n");
else
{
cout<<"Yes."<<endl;
for(int i=0;i<w;i++)//不是问题,但用w比2*n好。for(int i=0;i<2*n;i++)
if(x[i])
cout<<"in"<<endl;
else
cout<<"out"<<endl;
}
cout<<"FINISH"<<endl;
}
return 0;
}
AndyZhang 2011-08-21
  • 打赏
  • 举报
回复
好像就是模拟栈,能给出题目的意思么
bersaty 2011-08-21
  • 打赏
  • 举报
回复
抱歉,忘记了说明题目,是先输入一个数n(表示火车数量),然后输入n个数(为入栈顺序),再输入n个数(出栈顺序),如果可以出栈的话就输出 进栈和出栈的情况,否则输出No
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1022
寻找自我 2011-08-20
  • 打赏
  • 举报
回复
W没初始化。
hongwenjun 2011-08-20
  • 打赏
  • 举报
回复
我输入 3 abc deg 好像没问题
hongwenjun 2011-08-20
  • 打赏
  • 举报
回复
可以编译通过, 你的程序作什么的,需要输入什么

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧