Java basic | Java OOP | โครงสร้างข้อมูล | โจทย์ ACM



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";
}
}
         }





     ผลการรันโปรแกรม





share