[矩阵快速幂加速DP] Codeforces 717D Bubble Cup 9 - Finals D. Dexterina’s Lab

来源:互联网 发布:淘宝免费申请试用在哪 编辑:程序博客网 时间:2024/04/30 05:54

fx 表示 异或和为x的概率

然后DP一下


#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;const int N=150;struct Matrix{      int n; double a[N][N];      Matrix(int in=0,int f=0){          n=in; for (int i=0;i<=n;i++) for (int j=0;j<=n;j++) a[i][j]=0;          if (f==1) for (int i=0;i<=n;i++) a[i][i]=1;       }      double *operator [](int x){          return a[x];      }      friend Matrix operator * (Matrix &A,Matrix &B) {          int n=A.n; Matrix ret(n);          for (int i=0;i<=n;i++)                 for (int j=0;j<=n;j++)                  for (int k=0;k<=n;k++)                      ret[i][j]+=A[i][k]*B[k][j];          return ret;      }      friend Matrix Pow(Matrix &A,int b){          Matrix ret(A.n,1);          for (;b;b>>=1,A=A*A)              if (b&1)                  ret=ret*A;          return ret;      }  }A;  int n,m;double a[1005];int main(){freopen("t.in","r",stdin);freopen("t.out","w",stdout);scanf("%d%d",&n,&m);for (int i=0;i<=m;i++) scanf("%lf",a+i);A.n=127;for (int i=0;i<=127;i++)for (int j=0;j<=127;j++)A[i^j][j]=a[i];A=Pow(A,n);printf("%.8lf\n",1-A[0][0]);}


0 0
原创粉丝点击