校內模擬 三角形

2022-05-05 21:12:07 字數 1908 閱讀 4010

題目鏈結

時限:\(100ms\)    空間:\(512mb\)

無有\(n\)個木棍,現在知道了每個木棍的長度,要從中挑出三個木棍組成乙個三角形,

如何挑選木棍,使得組成的三角形的面積最大

由於出題人不會做

由於上面的要求過於毒瘤,

良心的出題人將題面改為了求乙個方案使得三角形的周長最大

輸出這個三角形的三邊長和面積

輸入格式

第一行乙個整數\(t\),表示資料組數

對於每組資料

第一行乙個整數\(n\),表示木棍的個數

第二行\(n\)個整數,表示這\(n\)個木棍的長度

輸出格式

對於t組資料

若不能構成三角形,輸出"\(!no~ answer!\)"

否則第一行從小到大輸出三個整數\(a,b,c\),表示周長最大的三角形的三邊長

第二行輸出乙個數,表示三角形的面積,只需要精確到整數

輸入樣例

輸入樣例#1:

1

51 2 3 4 5

輸入樣例#2:

1

51 1 2 3 5

輸出樣例

輸出樣例#1:

3 4 5

6

輸出樣例#2:

no answer!
對於前\(50\%\)的資料,\(1\leq n\leq 10^3\)

對於前\(100\%\)的資料,\(1\leq t\leq 10,1\leq n\leq 10^5,a_i \leq 10^\)

對於另外\(0\%\)的資料,\(1\leq t \leq 10^}}!, 1 \leq n \leq 10^}}}}\),\(a_i\)在複數系範圍內

顯然,我們可以貪心地不斷找最長的三條邊,如果可以構成三角形,就輸出答案

\(sort\)一遍複雜度是\(o(t*nlogn)\)的,期望得分\(50\)分

然而我們發現實際上如果\(n>50\),那麼一定會存在三角形

因為\(a_i\)的範圍比較小,如果\(50\)個邊仍無法構成三角形的話

我們考慮邊的大小遞增

第\(1、2\)個邊長最小為\(1\),那麼第\(3\)個邊最小為\(1+1=2\),

第\(4\)個邊最小為\(1+2=3\),第\(5\)個邊最小為\(2+3=5\)……

顯然第\(50\)條邊為\(fib_\),它是遠大於\(a_i\)的範圍的

所以當\(n \geq 50\)時,

所以可以用\(stl\)的\(nth\_element\)將前\(50\)大的搞到一塊兒,

將這\(50\)個\(sort\)一邊貪心地取即可

求面積直接套公式即可,記得要用\(double\)

#include#include#include#include#includeusing namespace std;

#define n 10000010

int t,n,a[n];

const int ch_top=5e8+3;

char ch[ch_top],*now_r=ch-1;

inline int read()

int main()

else sort(a+1,a+1+n);

bool flag=0;

long double x,y,z,p,ans;

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

if(a[i]+a[i+1]>a[i+2])

if(!flag) puts("no answer!");

} return 0;

}

然而由於資料是隨機的

直接找前三個最大數就可以過

不管不管不是我的鍋嚶嚶嚶

noip模擬賽 三角形

問題描述 平面上有n條直線,用方程aix biy ci 0表示。這些直線沒有三線共點的。現在要你計算出用這些直線可以構造出多少三角形?輸入 第1行 乙個整數n 1 n 300000 下面n行 每行3個整數 ai,bi 和ci,表示對應直線方程的係數。不超過10 9.對於40 的資料,n 1000 對...

求大三角形中三角形個數

一道筆試程式設計題要求求乙個大三角形中所有小三角形的個數,大約是下面這種情況 首先想到是的將問題由求邊長為n的三角形個數 求邊長為n 1的三角形個數 求邊長為1的三角形個數 1,回溯求得所有三角形個數。但是再仔細一看因為有重疊三角形和倒置的三角形,所以這個方法不可行。接著找到三角形個數由三部分組成 ...

經典演算法 (三)帕斯卡三角形(楊輝三角形)

楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在1654年發現這一規律的,比楊輝要遲393年,比賈憲遲600年。簡介 楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在165...