1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std;
7 #define Maxn 210
8
9 double f[Maxn][Maxn],sm[Maxn];
10 double g[Maxn][Maxn];
11 int a[Maxn];
12
13 int main()
14 {
15 int n,mx=0,M;
16 scanf("%d",&n);
17 for(int i=1;i<=n;i++) {scanf("%d",&a[i]);mx=max(mx,a[i]);}
18 M=1;while(M<=mx) M<<=1;M--;
19 f[1][0]=1.0;sm[1]=1;
20 for(int i=2;i<=mx;i++)
21 {
22 sm[i]=sm[i-1]*2;
23 for(int j=0;j<=M;j++) f[i][j]=f[i-1][j-1]*2*sm[i-1];
24 for(int j=0;j)
25 {
26 sm[i]+=sm[j]*sm[i-j-1];
27 for(int k=0;k<=M;k++)
28 for(int l=0;l<=M;l++)
29 {
30 f[i][(k+1)^(l+1)]+=f[j][k]*f[i-j-1][l]*sm[j]*sm[i-j-1];
31 }
32 }
33 for(int j=0;j<=M;j++) f[i][j]/=sm[i];
34 }
35 g[0][0]=1.0;
36 for(int i=1;i<=n;i++)
37 {
38 for(int j=0;j<=M;j++)
39 for(int k=0;k<=M;k++)
40 g[i][j]+=g[i-1][k]*f[a[i]][j^k];
41 }
42 double ans=0;
43 for(int j=1;j<=M;j++) ans+=g[n][j];
44 printf("%.6lf\n",ans);
45 return 0;
46 }