Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34848 A21μΘ_wjy 【S】T3 C++ 解答错误 0 21 MS 31992 KB 1267 2024-11-19 14:20:52

Tests(0/11):


#include<bits/stdc++.h> #define int long long #define doub long double using namespace std; const int N=1007; int n,m; doub p; doub f[N][N]; int tr[N*N][2]; int cnt[N*N]; int tot=1; doub ans=1; inline void DFS(int u,int d){ if(!d)return; if(tr[u][0])DFS(tr[u][0],d-1); if(tr[u][1])DFS(tr[u][1],d-1); ans*=f[cnt[tr[u][0]]][cnt[tr[u][1]]]; } signed main(){ #ifndef ONLINE_JUDGE freopen("string.in","r",stdin); freopen("string.out","w",stdout); #endif cin>>n>>m>>p; p=max(p,1-p); f[0][0]=1; for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ if((!i)&&(!j))continue; if(i>=j){ if(i)f[i][j]+=p*f[i-1][j]; if(j)f[i][j]+=(1-p)*f[i][j-1]; } else{ if(j)f[i][j]+=p*f[i][j-1]; if(i)f[i][j]+=(1-p)*f[i-1][j]; } } } for(int i=1;i<=n;i++){ int u=1; for(int j=1;j<=m;j++){ cnt[u]++; char ch;cin>>ch; int c=ch-'0'; if(!tr[u][c])tr[u][c]=++tot; u=tr[u][c]; } cnt[u]++; } DFS(1,m); cout<<fixed<<setprecision(12)<<ans<<endl; return 0; }


测评信息: