ACM InceptionWatchQ JAVA
Select language :ACM InceptionWatchQ JAVA
โจทย์ เป็นโจทย์ที่ยาวมาก อ่านแล้ว งง ก็ขอสรุปง่ายล่ะกันนะ
การแก้ปัญหา
การแก้ปัญหาในข้อนี้ใช้การคำนวณทางคณิตศาสตร์ธรรมดา เพื่อค่าหาเวลาที่ผ่านไปของแต่ละชั้น ให้แปลงเวลาทั้งหมดเป็นหน่วยวินาที
ตอนแรกต้องหาค่าเวลา(วินาที) ณ จุดที่เข้าไปสู่ฝันชั้นถัดไป (Tnext) ให้ทำจากฝันชั้นแรกไปยังชั้นสุดท้าย
จากนั้น ให้คำนวณกลับจากชั้นสุดท้ายมายังชั้นแรก ในชั้นสุดท้าย (level n) จะคำนวณเวลาของ Tsk ที่ชั้นนั้นได้โดยตรง ส่วนชั้น n-1 ต้องเอาเวลาทั้งหมด(elapsed time) ของชั้น n หารด้วย 12 แล้วบวกกับ Tnext ของชั้นนั้น ก็จะได้ Tsk ของชั้น n-1
input/output
โค้ดที่เขียนได้นะครับ
import java.util.Scanner; import java.util.Stack; public class InceptionW { static int s =1;//sec static int m =60;//sec static int h=3600;//=60*60 static int d=86400;//=24*60*60 static int y =31536000;//=365*24*60*60 public static void main(String[] args){ Scanner sc =new Scanner(System.in); InceptionW IW = new InceptionW(); Stack<Integer> stack = new Stack<Integer>(); String[] levels = new String[10]; int num=0,ans =0,count=0,co=0; char unit; String charten =""; while(true){ IW.cler(levels); String sin = sc.nextLine(); if(!sin.equals("-1")){ String[] in = sin.split(" "); count = Integer.parseInt(in[0]) ; unit = IW.findunit(sin); num = IW.tosecont(in[1], unit); stack.push (num); count ++; }else{ co = count; while(!stack.empty ()){ if(co-1 == ( int )stack.peek ()-1){ ans = (int)stack.pop();// }else{ ans = ans/12 + (int)stack.pop(); } co--; levels[co]=charten; } count = 0; co = 0; ans = 0; IW.print(levels); } } } public char findunit(String s){ return s.charAt(s.length()-1); } public int tosecont(String str,char c){ int num = Integer.parseInt(str); if(c == 's'){ num *= s; }else if(c == 'm'){ num *= m; }else if(c == 'h'){ num *= h; }else if(c == 'd'){ num *= d; }else if(c == 'y'){ num*=y; }else num =0; return num; } public String addcharecter(int num){ String n = num +""; String ans =""; String nr =revers(n); for(int i =0 ; i < 10 ;i++){ if(i > nr.length()) nr+="0"; } return ans = revers(nr); } public String revers(String num){ StringBuffer str_buff = new StringBuffer(num); str_buff.reverse(); String nr =str_buff.toString(); return nr; } public void print(String[] levels){ for(int i=0;i <levels.length;i++){ if(!(levels[i] =="0")) System.out.println(levels[i]); } } public void cler(String[] levels){ for(int i=0;i <levels.length;i++){ levels[i]="0"; } } } |