hihoCoder挑战赛16 A—— 王胖浩与三角形
生活随笔
收集整理的這篇文章主要介紹了
hihoCoder挑战赛16 A—— 王胖浩与三角形
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
思路:開(kāi)始沒(méi)有思路,想到了用三邊亂搞(每條邊按照比例增加)然而樣例都無(wú)法通過(guò)。后來(lái)想到了海倫公式sqrt((a+b+c)(a+b-c)(b+c-a)(a+c-b))/4,那么這樣以來(lái)就是讓這個(gè)三角形趨于正三角形了,即三邊的方差最小,那么依次是先補(bǔ)最短,次短,長(zhǎng)(貪心的算法)。
code:
#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <cstring> #include <sstream> #include <string> #include <vector> #include <list> #include <queue> #include <stack> #include <map> #include <set> #include <bitset>using namespace std;typedef long long ll; typedef unsigned long long ull; typedef long double ld;const int INF=0x3fffffff; const int inf=-INF; const int N=1000000; const int M=2005; const int mod=1000000007; const double pi=acos(-1.0);#define cls(x,c) memset(x,c,sizeof(x)) #define cpy(x,a) memcpy(x,a,sizeof(a)) #define fr(i,s,n) for (int i=s;i<=n;i++) #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define lrt rt<<1 #define rrt rt<<1|1 #define middle int m=(r+l)>>1 #define lowbit(x) (x&-x) #define pii pair<int,int> #define mk make_pair #define IN freopen("in.txt","r",stdin); #define OUT freopen("out.txt","w",stdout);double a[3],l; double sd(double a,double b,double c) {double p=(a+b+c)*0.5;return sqrt(p*(p-a)*(p-b)*(p-c)); }double sol() {double t=min(l,a[1]-a[0]);a[0]+=t,l-=t;if (l>0){t=min(l*0.5,(a[2]-a[1]));a[1]+=t;a[0]+=t;l-=t*2;//cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;if (l>0){fr(i,0,2)a[i]+=1.0*l/3;}}//cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;return sd(a[0],a[1],a[2]); } int main() {int T;scanf("%d",&T);while (T--){scanf("%lf %lf %lf %lf",&a[0],&a[1],&a[2],&l);sort(a,a+3);printf("%.10f\n",sol());} }
總結(jié)
以上是生活随笔為你收集整理的hihoCoder挑战赛16 A—— 王胖浩与三角形的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 召唤师加点
- 下一篇: CodeForces 501B——Mis