zoukankan      html  css  js  c++  java
  • Codeforces 540D Bad Luck Island

    http://codeforces.com/problemset/problem/540/D

    题目大意:

    会出石头、剪刀、布的人分别有r,s,p个,他们相互碰到的概率相同,输的人死掉,问最终活下去的人是三种类型的概率。

    思路:

    f[i][j][k]代表i个石头,j个剪刀,k个布状态的概率,初始f[n][m][K]=1

     

     1 #include<cstdio>
     2 #include<cmath>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<iostream>
     6 #define dou long double
     7 dou jc[20005];
     8 dou f[105][105][105];
     9 int n,m,K;
    10 int read(){
    11     int t=0,f=1;char ch=getchar();
    12     while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
    13     while ('0'<=ch&&ch<='9'){t=t*10+ch-'0';ch=getchar();}
    14     return t*f;
    15 }
    16 int main(){
    17     n=read();m=read();K=read();
    18     f[n][m][K]=1.0;
    19     for (int i=n;i>=0;i--)
    20      for (int j=m;j>=0;j--)
    21       for (int k=K;k>=0;k--)
    22        if (f[i][j][k]>0)
    23       {
    24         int cnt=((int)(i==0))+((int)(j==0))+((int)(k==0));
    25         if (cnt>=2) continue;
    26         double tot=i*j+j*k+k*i;
    27         if (i>0)
    28         f[i-1][j][k]+=f[i][j][k]*(i*k)/tot;
    29         if (j>0)
    30         f[i][j-1][k]+=f[i][j][k]*(i*j)/tot;
    31         if (k>0)
    32         f[i][j][k-1]+=f[i][j][k]*(k*j)/tot;
    33       }
    34     double ans1=0,ans2=0,ans3=0;
    35     for (int i=1;i<=n;i++)
    36      ans1+=(double)f[i][0][0];
    37      for (int i=1;i<=m;i++)
    38      ans2+=(double)f[0][i][0];
    39     for (int i=1;i<=K;i++)
    40      ans3+=(double)f[0][0][i];
    41     printf("%.9f %.9f %.9f
    ",ans1,ans2,ans3);   
    42     return 0;
    43 }

     

     

     

  • 相关阅读:
    一些 SQLite技巧
    linux增加swap空间
    linux解压命令
    数据库常用语句
    服务器命令
    Clickhouse高可用配置总结
    MySQL笔记
    Linux查看硬件信息
    Greenplum安装
    ClickHouse学习笔记
  • 原文地址:https://www.cnblogs.com/qzqzgfy/p/5628226.html
Copyright © 2011-2022 走看看