题目链接:Codeforces Round #273 (Div. 2) B. Dreamoon and WiFi
题意:“+”表示前进1个单位,“-”表示后退1个单位,问以0为起点经过S1,S2两个命令后达到的位置相同的概率。
思路:统计“+”和“-”的数量。如果S2中的“+”或者“-”比S1中的多,概率是0。其他条件下,形成的是超几何分布。
AC代码:
#include <stdio.h> #include <string.h> int fac(int n,int m) { int i,s=1; for(i=m;i>m-n;i--) s*=i; return s; } int C(int n,int m) { int a=fac(n,m); int b=fac(n,n); return a/b; } double ipow(double n,int p) { int i; double s=1.0; for(i=0;i<p;i++) s*=n; return s; } int main() { char s1[20],s2[20]; int len,i; while(scanf("%s",s1)!=EOF) { len=strlen(s1); int addsum,subsum; addsum=subsum=0; for(i=0;i<len;i++) { if(s1[i]=='+') addsum++; else subsum++; } scanf("%s",s2); int m=0,pos=0,sum; for(i=0;i<len;i++) { if(s2[i]=='?') m++; else if(s2[i]=='+') addsum--; else subsum--; } if(addsum<0 || subsum<0) printf("%.9lf\n",0); else { if(addsum+subsum!=m) printf("%.9lf\n",0); else { double ans; ans=ipow(0.5,m)*C(addsum,m); printf("%.9lf\n",ans); } } } return 0; } /* ++++++++++ +++??++?++ --+++---+- ?????????? */
Codeforces Round #272 (Div. 2) B. Dreamoon and WiFi (超几何分布)
原文:http://blog.csdn.net/u012377575/article/details/40051797