标签:hdu1022



3 123 321 3 123 312
Yes. in in in out out out FINISH No. FINISH
题意:就是说给一个火车进站的序列,然后再给你一个火车出站的序列,而火车站最多能停n列火车,问是否能按所给的序列号让火车出站。
注:并不是非要让所有进站的火车全部进来才能出站,只是如果火车站进了多列火车,后进来的必须先出,这就是栈:后进先出
package stack;
import java.util.Scanner;
public class P1022 {
static int n;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
char[] in,out;
String s;
String[] path;
int count,j;
while(sc.hasNext()){
n=sc.nextInt();
s=sc.next();
in=s.toCharArray();
s=sc.next();
out=s.toCharArray();
path=new String[n*2];
count=0;j=0;
TrainStack trainStack=new TrainStack(n);
for(int i=0;i<n;i++){
trainStack.inStack(in[i]);
path[count++]="in";//存操作方式,是进还是出
while(!trainStack.isEmpty()&&j<n&&trainStack.getTop()==out[j]){//按要求序列出站
path[count++]="out";
trainStack.outStack();
j++;
}
}
if(trainStack.isEmpty()){//若栈为空,则表示按要求序列将所有火车出站
System.out.println("Yes.");
for(int i=0;i<count;i++){
System.out.println(path[i]);
}
}else{
System.out.println("No.");
}
System.out.println("FINISH");
}
}
}
class TrainStack{
int top=0;
char[] stack;
public TrainStack(int n){
stack=new char[n];
}
public char getTop() {//获得栈顶数据
return stack[top-1];
}
public void inStack(char ch){//进栈
stack[top++]=ch;
}
public void outStack(){//出栈
if(isEmpty()){
return ;
}
top--;
}
public boolean isEmpty(){//判断栈是否为空
if(top==0){
return true;
}
return false;
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
hdu1022(Train Problem I)----- 典型栈类题目
标签:hdu1022
原文地址:http://blog.csdn.net/u011479875/article/details/47384301