#27274: 已經寫得很簡潔了 TLE怎麼解


s10914054@gm.cyut.edu.tw (Justin Tseng)

學校 : 不指定學校
編號 : 167107
來源 : [223.137.177.247]
最後登入時間 :
2022-08-30 17:42:14
a248. 新手訓練 ~ 陣列應用 -- 新手訓練系列 ~ 2 | From: [111.250.4.139] | 發表日期 : 2021-09-21 18:45

import java.math.*;

import java.util.*;

 

public class a248

{

public static void main(String[] args)

{

BigDecimal ans;

 

Scanner sc=new Scanner(System.in);

while(sc.hasNextInt())

{

BigDecimal number1=sc.nextBigDecimal();

BigDecimal number2=sc.nextBigDecimal();

int range=sc.nextInt();

 

ans=number1.divide(number2,range,RoundingMode.FLOOR);

System.out.println(ans);

}

 

sc.close();

}

}

 
#27275: Re:已經寫得很簡潔了 TLE怎麼解


jam930725@gmail.com (浮沉沉沉沉沉沉沉沉)

學校 : 國立臺中科技大學
編號 : 124762
來源 : [123.240.115.224]
最後登入時間 :
2022-08-27 13:56:53
a248. 新手訓練 ~ 陣列應用 -- 新手訓練系列 ~ 2 | From: [123.110.34.107] | 發表日期 : 2021-09-21 19:42

我直接貼你的程式碼是過的了的

AC (2.1s, 42.3MB)

當然 可以更快

 
#27277: Re:已經寫得很簡潔了 TLE怎麼解


s10914054@gm.cyut.edu.tw (Justin Tseng)

學校 : 不指定學校
編號 : 167107
來源 : [223.137.177.247]
最後登入時間 :
2022-08-30 17:42:14
a248. 新手訓練 ~ 陣列應用 -- 新手訓練系列 ~ 2 | From: [111.250.4.139] | 發表日期 : 2021-09-21 19:47

我直接貼你的程式碼是過的了的

AC (2.1s, 42.3MB)

當然 可以更快


謝謝大神

我是改用print配合"\n"解決

請問大神更快的方法是什麼呢

 
#27278: Re:已經寫得很簡潔了 TLE怎麼解


jam930725@gmail.com (浮沉沉沉沉沉沉沉沉)

學校 : 國立臺中科技大學
編號 : 124762
來源 : [123.240.115.224]
最後登入時間 :
2022-08-27 13:56:53
a248. 新手訓練 ~ 陣列應用 -- 新手訓練系列 ~ 2 | From: [123.110.34.107] | 發表日期 : 2021-09-21 20:12

不是大神

這題如果要進一步提升速度 可以從2個地方下手

第一個是算法的部分

我們可以將輸出以小數點作為基準 拆成2個部分來看

小數點前的部分 可以直接從 a/b 得知

小數點後的部分 則可以模擬除法來做

a %= b;

for(int i = 0; i < n; i++){

    a *= 10;

    tmp.append(a / b); //tmp是我的StringBuffer 用來儲存答案 我只是懶得想名字

    a %= b;

}

不過這種方法需要用BufferedWriter輸出(記得最後要flush()) 或是 將答案先用StringBuffer儲存起來 最後再一起輸出

AC (0.6s, 50MB)

這是我用Scanner進行輸入 StringBuffer儲存答案 搭配這種寫法的結果

 

第二種方法就是從IO下手 不過這題時限是3秒 蠻充裕的 不太需要這樣寫

output上面已經提過了

input可以用BufferedReader讀取 快比Scanner快

AC (0.4s, 46.1MB)

這是輸入改用BufferedReader的readLine()搭配split(" ")的結果

 
#27279: Re:已經寫得很簡潔了 TLE怎麼解


s10914054@gm.cyut.edu.tw (Justin Tseng)

學校 : 不指定學校
編號 : 167107
來源 : [223.137.177.247]
最後登入時間 :
2022-08-30 17:42:14
a248. 新手訓練 ~ 陣列應用 -- 新手訓練系列 ~ 2 | From: [111.250.4.139] | 發表日期 : 2021-09-21 20:25

不是大神

這題如果要進一步提升速度 可以從2個地方下手

第一個是算法的部分

我們可以將輸出以小數點作為基準 拆成2個部分來看

小數點前的部分 可以直接從 a/b 得知

小數點後的部分 則可以模擬除法來做

a %= b;

for(int i = 0; i < n; i++){

    a *= 10;

    tmp.append(a / b); //tmp是我的StringBuffer 用來儲存答案 我只是懶得想名字

    a %= b;

}

不過這種方法需要用BufferedWriter輸出(記得最後要flush()) 或是 將答案先用StringBuffer儲存起來 最後再一起輸出

AC (0.6s, 50MB)

這是我用Scanner進行輸入 StringBuffer儲存答案 搭配這種寫法的結果

 

第二種方法就是從IO下手 不過這題時限是3秒 蠻充裕的 不太需要這樣寫

output上面已經提過了

input可以用BufferedReader讀取 快比Scanner快

AC (0.4s, 46.1MB)

這是輸入改用BufferedReader的readLine()搭配split(" ")的結果

原來是這樣 謝謝"我心目中的大神"XD

 
ZeroJudge Forum