三角形最大周長

2022-06-08 14:15:13 字數 1629 閱讀 5653

鐵子從森林裡收集了n根木棍,她開始將它們按順序的排成一排,從左到右依次為1到n,她回想起

在數學課上老師教她的三角形知識,她開始從這些木棍中間找三根木棍來組成乙個周長最大的三角形,

這時她的兄弟順溜偷偷的溜了過來,偷走了第i根木棍,現在她想知道現在能夠組成周長最大的三角形

的周長是多少?

第一行兩個整數n和q。(1 ≤ n, q ≤ 105)

第二行n個整數表示第i根木棍的長度ai。(1 ≤ ai ≤ 109)

接下來q行,每行乙個整數表示被順溜偷走的木棍編號。注意每行的事件是獨立的,也就是說每一次操作都是對於原來的n根木棍進行的。

對於每個詢問輸出一行表示答案,如果刪除木棍後無法組成三角形則輸出 -1 。
示例1

複製

6 2

1 2 3 4 5 6

65

複製

12

13對於這個題,就是你先按照陣列從大到小拍個序,然後記錄下標,

首先你要先找到乙個符合要求的最大的三角形周長

for(z=n;z>=3;z--)

}

飯後分類討論看看刪除的這個是不是這三個木棒中的其中乙個

如果不是就直接輸入sum,

1.如果x=s[n].id

if(x==s[n].id)

} if(!f)

}

2.如果等於那兩個的話:

else

if(x==s[n-1

].id)

else

}if(!f)}}

else

else

}if(!f)}}

if(!f)

}

就是這樣討論,就是如果乙個排好序的三個邊(從小到大),a,b,c,(c>a+b)就能說明可以構成三角形

#include#include

using

namespace

std;

const

int maxn=1e6+100

;typedef

long

long

ll;ll a[maxn];

struct

nodes[maxn];

bool

cmp(node x,node y)

intmain()

sort(s+1,s+n+1

,cmp);

ll sum=-1

;

intz;

for(z=n;z>=3;z--)

} while(q--)

int flag=0

;

for(int i=n;i>=n-2;i--)

} if(!flag)

else

} if(!f)

}else

if(x==s[n-1

].id)

else

}if(!f)}}

else

else

}if(!f)}}

if(!f) }}

}}

}

LeetCode 976 三角形最大周長

組成三角形的充要條件 a b c。將a排序後,為了使周長最大,肯定是從後往前取,從最後一位c開始,依次判斷前兩位的數a,b之和是否比它大,只要滿足,那a c b和b c a又一定成立 c已經大於a b了 則abc可以構成三角形,且此時周長最大 如果不能滿足,就繼續往前找,直到找完所有a中元素。cla...

1 6 1 三角形周長最長

有n根棍子,棍子i的長度為ai。想要從中選出3根棍子組成周長盡可能長的三角形。請輸出最大的周長,若無法組成三角形則輸出0。限制條件 解法一這道題是 挑戰程式設計競賽 第二版 第16頁的一道熱身題,是比較簡單的一道入門題。題目中給出的n最大是100,所以可以通過簡單的列舉法便可得到答案,也就是書本上給...

求所構成三角形的最大周長

有n根棍子,棍子i的長度為a i 要從中選出三根棍子組成周長盡可能大的三角形。請輸出最大周長,若無法組成三角形則輸出0。3 n 100,1 a i 10 6.include include using namespace std define max n 100 int maxm int a,int...