首个题解,哈哈
2025-08-21 16:58:19
发布于:广东
19阅读
0回复
0点赞
#include<cstdio>
#include<algorithm>
using namespace std;const int N=1048580;typedef double db;db eps=1e-10;
int n;db a[N];db res;int up;int siz[N];
int main()
{
scanf("%d",&n);up=(1<<n);
for(int i=0;i<up;i++)scanf("%lf",&a[i]);
for(int k=1;k<up;k<<=1)
for(int s=0;s<up;s+=k<<1)
for(int i=s;i<s+k;i++)
{db a0=a[i];db a1=a[i+k];a[i]=a0;a[i+k]=a0+a1;}
for(int i=1;i<up;i++){siz[i]+=siz[i>>1]+(i&1);}
for(int i=1;i<up;i++)
{
if(1-a[(up-1)^i]<eps){printf("INF\n");return 0;}
db ex=1/(1-a[(up-1)^i]);if(siz[i]%2){res+=ex;}else {res-=ex;}
}printf("%.10lf",res);return 0;
}
全部评论 2
#include<bits/stdc++.h> using namespace std;const int N=1048580;typedef double db;db eps=1e-10;int n;db a[N];db res;int up;int siz[N];int main(){scanf("%d",&n);up=(1<<n);for(int i=0;i<up;i++)scanf("%lf",&a[i]);for(int k=1;k<up;k<<=1)for(int s=0;s<up;s+=k<<1)for(int i=s;i<s+k;i++){db a0=a[i];db a1=a[i+k];a[i]=a0;a[i+k]=a0+a1;}for(int i=1;i<up;i++){siz[i]+=siz[i>>1]+(i&1);}for(int i=1;i<up;i++){if(1-a[(up-1)^i]<eps){printf("INF\n");return 0;}db ex=1/(1-a[(up-1)^i]);if(siz[i]%2){res+=ex;}else {res-=ex;}}printf("%.10lf",res);return 0;}
5天前 来自 广东
0压缩版的
5天前 来自 广东
0
#include<bits/stdc++.h> using namespace std; const int N=1048580; typedef double db; db eps=1e-10,a[N],res; int n,up,siz[N]; int main(){ scanf("%d",&n);up=(1<<n); for(int i=0;i<up;i++)scanf("%lf",&a[i]); for(int k=1;k<up;k<<=1) for(int s=0;s<up;s+=k<<1) for(int i=s;i<s+k;i++){ db a0=a[i]; db a1=a[i+k]; a[i]=a0; a[i+k]=a0+a1; } for(int i=1;i<up;i++){ siz[i]+=siz[i>>1]+(i&1); } for(int i=1;i<up;i++){ if(1-a[(up-1)^i]<eps){ printf("INF\n"); return 0; } db ex=1/(1-a[(up-1)^i]); if(siz[i]%2){ res+=ex; }else{ res-=ex; } } printf("%.10lf",res); return 0; }
加缩进的
2025-08-25 来自 北京
0
有帮助,赞一个