首先只需推導公式就可以很快的寫出來。S 為輸入的值。
首項為 0,公差為 1,末項為 0 + (n - 1) * 1,而
S < n * (n - 1) / 2則 n = (2 * S + 1/4)1/2 + 1/2。但 n 求出後要減掉 1 才為解。參考程式碼如下:
2 * S < n * (n - 1)
2 * S < n2 - n + 1/4 - 1/4
2 * S + 1/4 < (n - 1/2)2
(2 * S + 1/4)1/2 < (n - 1/2)
(2 * S + 1/4)1/2 + 1/2 < n
printf("%lld\n",
(long long int)floor(sqrt( 2.0 * (double)S + 0.25 ) + 0.5) - 1) ;
這題執行時間 0.000 秒。
By David.K
p11614題目連結
回ACM題庫目錄
回首頁
沒有留言:
張貼留言