日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HIHO#1245 : 王胖浩与三角形

發布時間:2023/12/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HIHO#1245 : 王胖浩与三角形 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

<span style="color: inherit; line-height: 1.1; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; background-color: rgb(245, 245, 245);">#1245 : 王胖浩與三角形</span>

時間限制:1000ms 單點時限:1000ms 內存限制:256MB

描述

王胖浩有一個三角形,三邊長為a,b,c。他有特殊的能力,能增加三條邊的邊長,增加的總長度不能超過l。

他想通過合理地使用他的特殊能力,使得三角形的面積最大。

輸入

第一行一個整數T,表示測試數據個數。

以下T行,每行一個四個整數a,b,c,l。

數據范圍:

1<=T<=104, 1<=a,b,c<=106, 0<=l<=106

輸出

輸出T行,每行一個實數,表示三角形的面積。要求相對誤差不能超過10-9

樣例輸入
1 2 3 3 3
樣例輸出5.8216152143 解題思路
本題中,對于三角形的面積我們采用海倫--秦九韶公式。即對三角形三邊為a,b,c。其面積S可以表示為:d=(a+b+c)/2;s=sqrt(d*(d-a)*(d-b)*(d-c))那么要使得面積最大,根據題目中的意思,我們可以推導出題目中的l段必須全部用(推導過程比較簡單,只要比較一下總長度遞增時,面積的變化情況即可)。同時,還需要考慮在對各個邊進行增長時需要使得其仍是三角形。因此,可以考慮從最短的邊進行加長。編寫的代碼如下:#include<iostream> #include<math.h> using namespace std; void solve(double a,double b,double c ,double d); double area_solve(double a,double b,double c); int main(){double T=1e4;double a,b,c,d;cin>>T;for(double i=1;i<=T;i++){cin>>a>>b>>c>>d;if((a<=b)&&(b<=c))solve(a,b,c,d);else if((a<=c)&&(c<=b))solve(a,c,b,d);else if((b<=a)&&(a<=c))solve(b,a,c,d);else if((b<=c)&&(c<=a))solve(b,c,a,d);else if((c<=a)&&(a<=b))solve(c,a,b,d);elsesolve(c,b,a,d);}return 0; } void solve(double a,double b,double c ,double d){double aera2=0.0;int flag=0;double temp=b-a;if(temp<=d){a=a+temp;d=d-temp;}else{a=a+d;aera2=area_solve((double)a,(double)b,(double)c);flag=1;d=0;}if(flag==0){temp=c-b;if(d>2*temp){d=d-2*temp;a=c;b=c;double k=d;double a1=a+k/(3.0);double b1=b+k/(3.0);double c1=c+k/(3.0);aera2=area_solve(a1,b1,c1);flag=1;}else{double k=d;double a1=a+k/(2.0);double b1=b+k/(2.0);double c1=c;aera2=area_solve(a1,b1,c1);flag=1;}}if(flag==1){printf("%.11lf\n",aera2);//cout<<setprecision(10)<<aera2<<endl;} } double area_solve(double a,double b,double c){double d=(double)(a+b+c)/(2.0);double area=sqrt(d*(d-a)*(d-b)*(d-c));return area; }
題目中,需要注意的是:要求相對誤差不能超過10-9 因此,暗示我們需要將其轉化為double型進行處理。同時輸出時,要有小數位進行輸出(想吐槽一下hihocoder上對cout輸出并不友好,在代碼中可以看到我后來將cout那段隱掉了,換用了printf)。

總結

以上是生活随笔為你收集整理的HIHO#1245 : 王胖浩与三角形的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。