顯然,我們不能真的把所有數字接進來,時間與空間總有一個會爆
不妨思考一個問題,怎麼樣的情況會導致一群邊無法構建一個三角形?
考慮一個遞增數列,對於所有i < j < k,需要符合side[i] + side[j] <= side[k]
很剛好的,題目的邊長是有上界的。不難發現,只要n足夠大,我們就有機會找到連續的i, j, k,使得上面的事情失效
所以,目前我們知道了n只要到了某個值,我們就可以忽略邊長回答YES。
對於固定的邊長數量,我們想要找到一個數列使得任三邊無法構建一個三角形
而且為了不要誤判,我們希望n盡可能的大,因此我們希望構建的最大邊總是盡可能小
因此,我們去除小於,改為side[i] + side[j] = side[k]
最後我們得到了一個數列1, 1, 2, 3, 5, 8, 11, ...,實際上這就是費波那契數列
由於1.618^44 > 1e9,當n >= 46,我們再也不能創造這樣的數列,所以n >= 46就可以直接回答YES了!
(事實上,其實這也不會是O(n^3),還記得我前面說的,如果一個遞增邊長數列存在組合i, j, k構建一個三角形,那麼必定存在連續的i, j, k組合,證明略)