題目鏈結
時限:\(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...