• bzoj千题计划202:bzoj3191: [JLOI2013]卡牌游戏


    http://www.lydsy.com/JudgeOnline/problem.php?id=3191

    每个人获胜的概率只与其在排列中与庄家的相对位置有关

    dp[i][j] 还剩i个人时,从庄家数第j个人获胜的概率

    枚举这一次选哪张牌

    那么出局的就是从庄家数第(a[k]-1)% i+1 个人

    另其=t

    那么出局后,新的庄家 就是这一局的第t+1 个人

    那么第j个人就变成了新的一局的第 (j-t+i)%i 个人

    所以,转移方程为

    dp[i][j]= Σ dp[i-1][(j-t+i)%i] /m

    #include<cstdio>
    
    using namespace std;
    
    #define N 51
    
    int a[N];
    
    double dp[N][N];
    
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;++i) scanf("%d",&a[i]);
        dp[1][1]=1;
        int t;
        for(int i=2;i<=n;++i)
            for(int j=1;j<=i;++j)
                for(int k=1;k<=m;++k)
                {
                    t=(a[k]-1)%i+1;
                    if(t==j) continue;
                    t=(j-t+i)%i;
                    dp[i][j]+=dp[i-1][t]/m;
                }
        printf("%.2lf%%",dp[n][1]*100);
        for(int i=2;i<=n;++i) printf(" %.2lf%%",dp[n][i]*100);
    }

    3191: [JLOI2013]卡牌游戏

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 672  Solved: 451
    [Submit][Status][Discuss]

    Description

     
    N个人坐成一圈玩游戏。一开始我们把所有玩家按顺时针从1到N编号。首先第一回合是玩家1作为庄家。每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家首先把卡片上的数字向所有玩家展示,然后按顺时针从庄家位置数第X个人将被处决即退出游戏。然后卡片将会被放回卡牌堆里并重新洗牌。被处决的人按顺时针的下一个人将会作为下一轮的庄家。那么经过N-1轮后最后只会剩下一个人,即为本次游戏的胜者。现在你预先知道了总共有M张卡片,也知道每张卡片上的数字。现在你需要确定每个玩家胜出的概率。
    这里有一个简单的例子:
    例如一共有4个玩家,有四张卡片分别写着3,4,5,6.
    第一回合,庄家是玩家1,假设他选择了一张写着数字5的卡片。那么按顺时针数1,2,3,4,1,最后玩家1被踢出游戏。
    第二回合,庄家就是玩家1的下一个人,即玩家2.假设玩家2这次选择了一张数字6,那么2,3,4,2,3,4,玩家4被踢出游戏。
    第三回合,玩家2再一次成为庄家。如果这一次玩家2再次选了6,则玩家3被踢出游戏,最后的胜者就是玩家2.
     

    Input

    第一行包括两个整数N,M分别表示玩家个数和卡牌总数。
    接下来一行是包含M个整数,分别给出每张卡片上写的数字。
     

    Output

    输出一行包含N个百分比形式给出的实数,四舍五入到两位小数。分别给出从玩家1到玩家N的胜出概率,每个概率之间用空格隔开,最后不要有空格。
     

    Sample Input

    5 5
    2 3 5 7 11

    Sample Output

    22.72% 17.12% 15.36% 25.44% 19.36%

    输入样例2:
    4 4
    3 4 5 6

    HINT

    对于100%的数据,有1<=N<=50 1<=M<=50 1<=每张卡片上的数字<=50

  • 相关阅读:
    年轻人的第一个 Spring Boot 应用,太爽了!
    面试问我 Java 逃逸分析,瞬间被秒杀了。。
    Spring Boot 配置文件 bootstrap vs application 到底有什么区别?
    坑爹的 Java 可变参数,把我整得够惨。。
    6月来了,Java还是第一!
    Eclipse 最常用的 10 组快捷键,个个牛逼!
    Spring Cloud Eureka 自我保护机制实战分析
    今天是 Java 诞生日,Java 24 岁了!
    厉害了,Dubbo 正式毕业!
    Spring Boot 2.1.5 正式发布,1.5.x 即将结束使命!
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/8227470.html
Copyright © 2020-2023  润新知