题意:给一个字符串,将每个字符分开放进两个口袋,每次从两个口袋分别拿出一个字符,如果相同则开心,问开心的次数期望是多少。
分析:数学期望题,然而这是我最不拿手的。。。最后答案是每个字符在字符串出现的次数/字符串长度的和。
1 #include <cstdio> 2 #include <cmath> 3 #include <cstring> 4 #include <ctime> 5 #include <iostream> 6 #include <algorithm> 7 #include <set> 8 #include <vector> 9 #include <sstream> 10 #include <queue> 11 #include <typeinfo> 12 #include <fstream> 13 #include <map> 14 #include <stack> 15 using namespace std; 16 const int maxn=200010; 17 char s[maxn]; 18 int h[maxn]; 19 int main() 20 { 21 scanf("%s",s); 22 int len=strlen(s); 23 memset(h,0,sizeof(h)); 24 for(int i=0;i<len;i++){ 25 h[s[i]]+=1; 26 } 27 double ans=0; 28 for(int i=0;i<len;i++){ 29 ans+=h[s[i]]*1.0/(len*1.0); 30 } 31 printf("%.9f ",ans); 32 return 0; 33 }