时间:2021-07-01 10:21:17 帮助过:10人阅读
题目链接:Codeforces Round #273 (Div. 2) B. Dreamoon and WiFi 题意:“”表示前进1个单位,“-”表示后退1个单位,问以0为起点经过S1,S2两个命令后达到的位置相同的概率。 思路:统计“”和“-”的数量。如果S2中的“”或者“-”比S1中的多,概率是0。
题目链接: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];="" len,i;="" while(scanf("%s",s1)!="EOF)" len="strlen(s1);" addsum,subsum;="" addsum="subsum=0;" for(i="0;i<len;i++)" if(s1[i]="='+')" addsum++;="" else="" subsum++;="" scanf("%s",s2);="" m="0,pos=0,sum;" if(s2[i]="='?')" m++;="" addsum--;="" subsum--;="" if(addsum<0="" ||="" subsum<0)="" printf("%.9lf\n",0);="" if(addsum+subsum!="m)" double="" ans;="" ans="ipow(0.5,m)*C(addsum,m);" printf("%.9lf\n",ans);="" 0;="" *="" ++++++++++="" +++??++?++="" --+++---+-="" ??????????="" <="" script=""></p;i++)></string.h></stdio.h>