Java 杭電ACM Train Problem I 1022
Problem Description
As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of student want to get back to school by train(because the trains in the Ignatius Train Station is the fastest all over the world ^v^). But here comes a problem, there is only one
railway where all the trains stop. So all the trains come in from one side and get out from the other side. For this problem, if train A gets into the railway first, and then train B gets into the railway before train A leaves, train A can't leave until train
B leaves. The pictures below figure out the problem. Now the problem for you is, there are at most 9 trains in the station, all the trains has an ID(numbered from 1 to n), the trains get into the railway in an order O1, your task is to determine whether the
trains can get out in an order O2.
Input
The input contains several test cases. Each test case consists of an integer, the number of trains, and two strings, the order of the trains come in:O1, and the order of the trains leave:O2. The input is terminated by the end of file. More details in the Sample
Input.
Output
The output contains a string "No." if you can't exchange O2 to O1, or you should output a line contains "Yes.", and then output your way in exchanging the order(you should output "in" for a train getting into the railway, and "out" for a train getting out of
the railway). Print a line contains "FINISH" after each test case. More details in the Sample Output.
Sample Input
3 123 321
3 123 312
Sample Output
Yes.
in
in
in
out
out
out
FINISH
No.
FINISH
For the first Sample Input, we let train 1 get in, then train 2 and train 3.
So now train 3 is at the top of the railway, so train 3 can leave first, then train 2 and train 1.
In the second Sample input, we should let train 3 leave first, so we have to let train 1 get in, then train 2 and train 3.
Now we can let train 3 leave.
But after that we can't let train 1 leave before train 2, because train 2 is at the top of the railway at the moment.
So we output "No.".
Hint
Hint解題思路:本題解決很簡單,就是火車必須先進後出(棧)不一定需要全部出棧後才能進,只要有出去的就能進來,實際上模擬棧的操作,這裡我用的是集合,用LinkedList最好,裡面涉及需要得到棧中最後一個以及移除最後一個,(本人之前一直用的Arraylist,坑了有點時間),
用加一個,裝一個字串”in“,和出一個”out“,要是條件滿足,就輸出這些,否則就不輸出。
package cn.hncu.acm;
import java.util.LinkedList;
import java.util.Scanner;
public class p1022 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();//接收:題目要求
String a=sc.next();
char in[]=a.toCharArray();//收到的字串變成字元陣列
String b=sc.next();
char out[]=b.toCharArray();//字元陣列
LinkedList<Character> list =new LinkedList<Character>();//針對這題,採用LinkedList是最實用的,
int count=0;
int j=0;
String path[]=new String[2*n];//記錄輸出“in”和"out"
//核心的處理
for(int i=0;i<in.length;i++){
list.add(in[i]);//每次加入一個都要進行判斷下
path[count++]="in";//把in加入陣列path中
while(!list.isEmpty()&&j<n&&list.getLast()==out[j]){//判斷,出棧的是否和壓棧(首先第一個)的一樣,若一樣,則表示有出去的
path[count++]="out";//標記為“out”
list.removeLast();//移除最後進來的一個物件(採用LinkedList的優勢就在這裡,之前採用Arraylist這個問題很難解決,果斷採用這個LinkedList)
j++;//每次比較之後就開始進行下一個比較。
}
}
//輸出
if(list.isEmpty()){//若是空棧,說明出去完成,輸出es
System.out.println("Yes.");
for(int i=0;i<path.length;i++){
System.out.println(path[i]);//輸出路徑
}
}else{
System.out.println("No.");//否則輸出no
}
System.out.println("FINISH");//最後輸出完成
}
}
}
相關文章
- ACM A problem is easyACM
- 杭電ACM hdu 2152 Fruit 解題報告(母函式)ACMUI函式
- A - Yet Another Two Integers Problem ACMACM
- 杭電ACM hdu 1398 Square Coins 解題報告(母函式)ACM函式
- 杭電ACM hdu 2110 Crisis of HDU 解題報告(母函式)ACM函式
- 杭電ACM hdu 1171 Big Event in HDU 解題報告(母函式)ACM函式
- 杭電ACM hdu 2082 找單詞 解題報告(母函式)ACM函式
- 杭電ACM hdu 2079 選課時間 解題報告(母函式)ACM函式
- 杭電多校補題
- ACM(遞迴遞推—I)ACM遞迴
- DP 動態規劃 Problem V 1022 反向考慮的揹包動態規劃
- 『杭電1939』He is offside!IDE
- 杭電ACM hdu 1085 Holding Bin-Laden Captive! 解題報告(母函式)ACMAPT函式
- 針對OJ的JAVA 輸入(PAT,牛客網,杭電 etc)Java
- C語言訓練之杭電OJC語言
- 杭電OJ 2032楊輝三角
- trainAI
- 【杭電oj】1222 - Wolf and Rabbit(GCD)GC
- 杭電OJ 2066 一個人的旅行
- 2024杭電多校第8場
- 2024杭電多校第九場
- 2024杭電多校第9場
- 2018 ICPC-ACM shenyang G - Best ACMer Solves the Hardest ProblemACM
- 『杭電1848』Fibonacci again and againAI
- 2024杭電多校覆盤 (1~5)
- Codeforces 954I Yet Another String Matching Problem
- 杭電OJ 2048 完全錯排的可能性
- hihocoder 1260 String Problem I (Trie樹 好題)
- Problem_2 Majority Problem
- (杭電1019 最小公倍數) Least Common MultipleAST
- Java I/OJava
- 1022模擬賽
- 杭電OJ 2028求n個數的最小公倍數
- java中i=i++的問題Java
- transformers、torch train demoORMAI
- Java(8)I/OJava
- 【java】I/O流Java
- Java I/O流Java