[ACM] 巴斯卡三角形的和

看板C_and_CPP (C/C++)作者 (某數..失業中)時間15年前 (2010/10/20 13:07), 編輯推噓4(4016)
留言20則, 8人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 題號: http://zerojudge.tw/ShowProblem?problemid=d817 遇到的問題: 想要做優化 讓程式跑得更快 有問題的code: (請善用置底文的標色功能) http://codepad.org/5hWl231W 補充說明: 目前的成績是(212ms, 3972KB) 測資經我不小心忘記處理EOF後得到共一萬筆 但是加了input()作讀取優化似乎沒太大效用 只差個幾十ms 另外的乘除取餘我都用了加減法做替代 而unsigned long long int("%018llu")的版本反而比int還要慢 想問問板友哪邊是可以再做加速的 目前想到的就只有類似2^5000=2^2500*2^2500 不過大數相乘應該會比較慢? 另外VC++哪邊可以設定STACK SIZE呢 不然每次開新專案都要重新設定 做大一點的DP或是大數就又要去設 冏> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.137.151.115 ※ 編輯: x000032001 來自: 114.137.151.115 (10/20 13:08)

10/20 13:28, , 1F
傻眼...scanf不就有回傳直可以用? 管它是不是EOF
10/20 13:28, 1F
因為getchar這樣寫比scanf快 我本來也用scanf 大概差了幾十ms

10/20 13:38, , 2F
printf、putchar少做幾次
10/20 13:38, 2F
※ 編輯: x000032001 來自: 114.137.215.139 (10/20 14:47)

10/20 15:01, , 3F
我沒熱血回文了,寄給你程式碼。60ms,排名第一。
10/20 15:01, 3F

10/20 15:26, , 4F
如果是運算加速 應該是數值方法的問題
10/20 15:26, 4F

10/20 15:34, , 5F
收到 完全不一樣的算法 甘拜下風XD
10/20 15:34, 5F

10/20 19:51, , 6F
2^n?
10/20 19:51, 6F

10/20 19:52, , 7F
這樣212ms喔(思)
10/20 19:52, 7F

10/20 20:42, , 8F
直接改值? 2^4:(binary)00000->10000
10/20 20:42, 8F

10/20 20:49, , 9F
那2^5000要怎麼改
10/20 20:49, 9F

10/21 10:12, , 10F
稍微研究一下你的程式碼,計算的部分花的時間大約花整
10/21 10:12, 10F

10/21 10:13, , 11F
體的1~3%左右而已,較花時間都是在input跟printf
10/21 10:13, 11F

10/21 10:15, , 12F
請改成用一個char[]去接,用itoa與strcat塞到字串,最
10/21 10:15, 12F

10/21 10:16, , 13F
後一次printf出去,速度就會快2~3倍吧
10/21 10:16, 13F

10/21 10:17, , 14F
這個例子告訴我們,最佳化要先研究哪部分花時間
10/21 10:17, 14F

10/21 12:41, , 15F
喔喔 我改成http://codepad.org/QYfQXh7o 變成了
10/21 12:41, 15F

10/21 12:41, , 16F
(128ms, 18.8MB) 快了6xms 不過input怎麼更快我不懂@@
10/21 12:41, 16F

10/21 12:53, , 17F
最後用malloc char[20萬] 結果是 (102ms, 10.8MB)
10/21 12:53, 17F

10/21 12:54, , 18F
比原本的快了一百多orz
10/21 12:54, 18F

10/21 17:36, , 19F
String雖然是動態長度,可是過程一定會反覆宣告記憶體
10/21 17:36, 19F

10/21 17:37, , 20F
宣告記憶體會拖慢一定速度
10/21 17:37, 20F
文章代碼(AID): #1Cldad3r (C_and_CPP)
文章代碼(AID): #1Cldad3r (C_and_CPP)