我目前正在研究網上法官的問題。但是,我的代碼一直超過TimeLimit,這隻有1秒。我已經使用了Scanner
和System.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();
}
}
}
''我目前正在研究網上法官的問題。「' - 如果這是在線比賽,你不應該自己解決這個問題嗎?就是想。 –
@HovercraftFullOfEels不是比賽。我只是在練習,無論如何感謝您的疑惑。 – Hans
這是什麼... – Shahar