鐵子從森林裡收集了n根木棍,她開始將它們按順序的排成一排,從左到右依次為1到n,她回想起
在數學課上老師教她的三角形知識,她開始從這些木棍中間找三根木棍來組成乙個周長最大的三角形,
這時她的兄弟順溜偷偷的溜了過來,偷走了第i根木棍,現在她想知道現在能夠組成周長最大的三角形
的周長是多少?
第一行兩個整數n和q。(1 ≤ n, q ≤ 105)
第二行n個整數表示第i根木棍的長度ai。(1 ≤ ai ≤ 109)
接下來q行,每行乙個整數表示被順溜偷走的木棍編號。注意每行的事件是獨立的,也就是說每一次操作都是對於原來的n根木棍進行的。
對於每個詢問輸出一行表示答案,如果刪除木棍後無法組成三角形則輸出 -1 。示例1
複製
6 21 2 3 4 5 6
65
複製
1213對於這個題,就是你先按照陣列從大到小拍個序,然後記錄下標,
首先你要先找到乙個符合要求的最大的三角形周長
for(z=n;z>=3;z--)}
飯後分類討論看看刪除的這個是不是這三個木棒中的其中乙個
如果不是就直接輸入sum,
1.如果x=s[n].id
if(x==s[n].id)} if(!f)
}
2.如果等於那兩個的話:
elseif(x==s[n-1
].id)
else
}if(!f)}}
else
else
}if(!f)}}
if(!f)
}
就是這樣討論,就是如果乙個排好序的三個邊(從小到大),a,b,c,(c>a+b)就能說明可以構成三角形
#include#includeusing
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...