推 EdisonX:c語言的 math.h 和 c++ 的 cmath 提供之函式不盡相同, 05/14 04:08
→ EdisonX:.. 請忽略推文 .. 問題似乎還不在這.. 05/14 04:11
→ BombCat:@c大:可是ZJ答案是錯的 @E大:我是都是用math.c 05/14 04:11
→ EdisonX:TLE.. 真妙.. 05/14 04:26
→ EdisonX:換種寫法, 把 recursive 拿掉, 另還用不到 ull, 改這二個 05/14 04:27
→ EdisonX:應可快不少。 05/14 04:27
→ EdisonX:( long long 似乎還是必要的.. ) 05/14 04:28
→ BombCat:@E大: 所以問題在遞迴上? 05/14 04:30
→ EdisonX:不很確定,另外我其實很好奇,math.h裡面之函式有支援log2 ? 05/14 04:34
→ BombCat:看起來至少gcc有 (我想是自己extendsion的吧 05/14 04:36
→ BombCat:@E大,c大:謝謝你們的幫忙,我要去睡了 05/14 04:53
→ loveme00835:你寫的時候記得開 -Wall 然後會發現"並不是所有路徑都 05/14 05:12
→ loveme00835:有回傳值" 05/14 05:14
→ loveme00835:沒有 return 又要函式生東西來給你, 結果是未知的, 加 05/14 05:16
→ loveme00835:上它又是遞迴的條件, TLE/WA 是當然的 05/14 05:18
推 EdisonX:真妙.. 我還一直在 math.h ceil 這裡面打轉(覺得有捨位誤) 05/14 05:19
→ loveme00835:我是沒開啦~ 看到 if 沒看到 else 一定有古怪 05/14 08:33
謝謝版上的各位大大的幫忙,我找到錯誤了
用一個簡單的loop計算,去取代
Exp=(unsigned long long int)pow(2,ceill(log2(Len))); 這一行
就可以讓C也可以過了。
不過還是不知道為什麼之前版本會讓C過不了? 真的好奇是什麼原因造成的
要不然哪天寫到一個會爆的C程式還蠻抖的...
AC code: http://ideone.com/WnFuw
謝謝c大,E大還有l大
※ 編輯: BombCat 來自: 123.205.55.3 (05/14 09:49)
→ EdisonX:我猜的,pow 回傳 double,精度已不能滿足 ull . 05/14 09:52
→ BombCat:有可能,畢竟浮點數有些數只能近似 05/14 10:00
→ BombCat:不過C++居然正常,難到他們用的lib不一樣? 05/14 10:01
→ EdisonX:我所知是不一樣沒錯。不過這例要確信原因,可能要花點時間 05/14 10:04
→ EdisonX:再推導驗證。 05/14 10:04
→ BombCat:感謝E大的意見 05/14 10:09
→ zaqimon:很多語法關鍵字C都沒有 像之前才發現C沒有bool 05/14 13:12
推 Chikei:C++有overload long double的版本,C的對應是powl不是pow 05/14 13:54
推 cobrasgo:應該是linking時找的lib不一樣吧 05/14 19:35