问题 C: Cly的三角形
題目描述
Cly很喜歡三角形,有一天他遇到了一道和三角形有關的題,但是這道題他簡單了,他懶得做,于是交給了你。
給定一個數組,每次詢問一個子區間,如果能從這個子區間挑出三個數組成三角形輸出clynb,否者輸出clycdd。
輸入
第一行給出數組大小n,查詢次數q (1<=m,q<=1e5)
接下來一行輸入n個數,表示a[i] (1<=a[i]<=1e9)
接下來q行,每行輸入兩個數l,r,代表一個子區間 (1<=l,r<=n)
輸出
對于每個詢問輸出clynb或者clycdd
樣例輸入
5 3
2 1 4 3 5
1 2
1 3
3 5
樣例輸出
clycdd
clycdd
clynb
看了題之后的第一反應是分這么幾步。
1:判斷l—r區域內是否有大于等于三個數字,沒有就輸出clycdd。
2:把數據sort一遍從小到大排序。
3:從第一個到第n-2個開始遍歷,判斷a[i]+a[i+1]>a[i+2]是否成立,成立就輸出clynb,全不成立就輸出clycdd。
4:提交,超時,卒…
賽后看了題解才明白,我們都知道(除了我)斐波那契數列遞推式是a[i]+a[i+1]=a[i+2],第44項為七億多,第45項就十億多了了。題目中
如果這個數列不滿足形成三角形的條件不能形成三角形的條件是a[i]+a[i+1]<=a[i+2],我們就讓a[i]+a[i+1]=a[i+2],這樣就會形成斐波那契數列。然后根據題目中a[i]的范圍在1e9之內我們可以推出:從第45項開始知數列不滿足a[i]=a[i-1]+a[i-2],此時必能形成三角形。于是我們給題目優化一下,當l—r的長度大于45時,就一定是clynb,這樣一來就能少判斷好多數據,時間上也不會超辣~
總結
以上是生活随笔為你收集整理的问题 C: Cly的三角形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 了解一下这几款实用的小众软件,相信你会有
- 下一篇: 计算机桌面图标的使用,电脑桌面图标不见了