2014-02-21 3 views
-3

현재 온라인 판사의 문제를 해결하고 있습니다. 그러나 내 코드는 1 초인 TimeLimit을 계속 초과합니다. 내가 ScannerSystem.out.print()을 사용했지만, 그러한 메소드가 코드를 느리게 만들 것이고 더 많은 메모리를 소비 할 것이라고 말했고, 이는 입력 및 출력을 버퍼링하는 방식입니다. 변수가 저장된 값이이 값보다 길기 때문에 long 또는 int과 같은 유형을 사용할 수 없습니다.코드를 더 빨리 최적화하려면 어떻게해야합니까?

import java.io.*; 
import java.math.BigDecimal; 

class Main { 
    public static void main(String[] args) throws NumberFormatException, IOException{ 
     java.io.InputStreamReader iSR = new java.io.InputStreamReader(System.in); 
     java.io.BufferedReader bR = new java.io.BufferedReader(iSR, 16 * 1024); 
     BufferedWriter bW = new BufferedWriter(new OutputStreamWriter(System.out)); 
     String tL; 
     BigDecimal PRA = BigDecimal.ZERO, PRB = BigDecimal.ZERO, PA = BigDecimal.ZERO, PB = BigDecimal.ZERO; 
     int input = Integer.parseInt(bR.readLine()); 
     for(int j = 0; j < input; j++){ 
      tL = bR.readLine(); 
      String [] = arr = tL.split(" "); 
      PA = BigDecimal.valueOf(Integer.parseInt(arr[0])); 
      PB = BigDecimal.valueOf(Integer.parseInt(arr[1])); 
      PRA = BigDecimal.valueOf(Double.parseDouble(arr[2])); 
      PRB = BigDecimal.valueOf(Double.parseDouble(arr[3])); 
      PRA = PRA.divide(BigDecimal.valueOf(100)); PRA = PRA.add(BigDecimal.ONE); 
      PRB = PRB.divide(BigDecimal.valueOf(100)); PRB = PRB.add(BigDecimal.ONE); 
      int i = 1; 
      while(PA.compareTo(PB) < 0 && i < 103){ 
       BigDecimal ibd = BigDecimal.valueOf(i); 
       PA = PA.multiply(PRA).multiply(ibd); 
       PB = PB.multiply(PRB).multiply(ibd); 
       i++; 
      } 
      i--; 
      if(i > 100) bW.write("Mais de 1 seculo.\n"); 
      else bW.write(String.valueOf(i) + " anos.\n"); 
      bW.flush(); 
     } 
    } 
} 
+0

''현재 온라인 판사의 문제를 다루고 있습니다. ''- 온라인 콘테스트의 경우이 문제를 혼자 해결해서는 안됩니까? 그냥 궁금해. –

+0

@HovercraftFullOfEels 경연 대회가 아닙니다. 어쨌든 궁금해해서 고마워. – Hans

+0

도대체 이것은 무엇입니까 ... – Shahar

답변

3

한 점 .. 당신은 tL.split("\\s") 여러 번하지 말아야

: 여기

는 코드입니다. 한 번만 해보고 변수에 할당하고 대신 사용하십시오.

+0

사실, 당신의 충고를 따르면 새로운 인스턴스를 만들지 만 도움이되지 않습니다. 도와 줘서 고맙다. – Hans

+0

@ 한스 : 그렇게하는 대신, 하나 대신 네 개의 새 인스턴스를 생성합니다. Tell의 방법은 분명히 더 낫고 명백하게 * 도움이되지 않습니다. –

+0

@HovercraftFullOfEels 5 인스턴스를 생성하는 대신 4를 생성 중입니다. – Hans

관련 문제