Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Problem E:
HullMarathon

うさぎはフルマラソンという競技が好きである. この競技はチームで行う. チームメンバーは競技開始前に原点に集まる. 競技開始と同時に走り出し, 1 分後に立ち止まる．このとき，チームメンバーの位置の凸包の面積が最も大きなチームが勝ちとなる.

あなたは $N$ 匹のうさぎからなるチームの監督である. $i$ 匹目のうさぎは 1 分で $r_i$ 移動することができる. このチームが最適な戦略をとった場合の, 1 分後の凸包の面積の最大値を求めよ.

Constraints

$N$ will be between 3 and 8, inclusive.

$r_i$ will be an integer between 1 and 1,000, inclusive.

Input

入力は以下の形式で与えられる:

$N$

$r_1$

...

$r_N$

Output

凸包の面積の最大値を表す実数を 1 行に出力せよ. 小数点以下何桁出力してもよいが, 絶対誤差または相対誤差が $10^{-6}$ 以下のとき Accepted になる.

Sample Input 1

4
5
8
58
85

Sample Output 1

2970.000000000

Sample Input 2

6
1
1
1
1
1
1

Sample Output 2

2.598076211

Solution in C++11 (judge verdict: Wrong Answer)

#include<bits/stdc++.h>
using namespace std;
using Int = long long;

template<typename T1,typename T2> inline void chmin(T1 &a,T2 b){if(a>b) a=b;}
template<typename T1,typename T2> inline void chmax(T1 &a,T2 b){if(a<b) a=b;}


struct Precision{
  Precision(){
    cout<<fixed<<setprecision(12);
  }
}precision_beet;

//INSERT ABOVE HERE
signed main(){
  auto calc=[](vector<Int> v){
    Int n=v.size();
    const double PI = acos(-1);
    double res=0;
    sort(v.begin(),v.end());
    do{      
      v.emplace_back(v[0]);
      auto calc2=[&](double x){
	double res=0,tmp=0;
	for(Int i=0;i<n;i++){
	  double y=acos(v[0]*v[1]*cos(x)/(v[i]*v[i+1]));
	  res+=y;
	  tmp+=v[i]*v[i+1]*sin(y)/2;
	}
	return make_pair(res,tmp);
      };
      double l=0,r=2*PI;
      for(Int i=0;i<100;i++){
	double m=(l+r)/2;
	if(calc2(m).first<=2*PI) l=m;
	else r=m;
      }      
      chmax(res,calc2(l).second);
      v.pop_back();
    }while(next_permutation(v.begin(),v.end()));
    return res;
  };
  
  Int n;
  cin>>n;
  vector<Int> r(n);
  for(Int i=0;i<n;i++) cin>>r[i];
  double ans=0;
  for(Int b=1;b<(1<<n);b++){
    vector<Int> v;
    for(Int i=0;i<n;i++)
      if((b>>i)&1) v.emplace_back(r[i]);
    if(v.size()<3u) continue;
    chmax(ans,calc(v));
  }
  cout<<ans<<endl;
  return 0;
}