問題 C Cly的三角形

2021-10-12 14:19:25 字數 1314 閱讀 8802

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 32 1 4 3 5

1 21 3

3 5clycdd

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,這樣一來就能少判斷好多資料,時間上也不會超辣~

#include

using namespace std;

#define qc std::ios::sync_with_stdio(0);

const

int n =

1e5+10;

long

long a[n]

;long

long b[n]

;int

main()

while

(q--

)else

sort

(b, b + len)

;int flag =0;

for(

int i =

0; i < len -

2; i++)}

if(flag ==0)

printf

("clycdd\n");

}}return0;

}

三角形問題

問題及 檔名稱 main.cpp 作 者 李磊濤 版 本 號 v1.0 問題描述 輸出三角形的周長和面積。輸入描述 無。程式輸出 輸出三角形的周長和面積。include includeusing namespace std class void setabc double x,double y,do...

數字三角形問題

數字三角形問題 標籤 動態規劃 雜談分類 演算法設計 34 5 11 9 8 15 21 13 4 這是乙個數字三角形。請編乙個程式計算從頂至底的某處的一條路徑,使該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 1 三角形行數 200 三角形中的數字為整數0,1,99 輸入格式 第...

列印三角形問題

列印如下所示等腰三角形 方法1 f用來處理空格與 交替 n為行數,k為 出現的數目 public static void outtri int n else system.out.println 方法2 f用來處理空格與 交替 n為行數,k為 最大的位置 public static void out...