首页 > 其他分享 >P2059 [JLOI2013] 卡牌游戏 题解

P2059 [JLOI2013] 卡牌游戏 题解

时间:2022-10-19 20:16:06浏览次数:63  
标签:... ch JLOI2013 游戏 int 题解 胜率 MAXN P2059

一道不错的线性 dp,带了点逆推。

注意到如果我们设 \(f_{i,j}\) 表示前 \(i\) 轮过后 \(j\) 存活的概率,那么我们需要额外记录哪些人无了,否则无法转移。

考虑这样一件事:无论剩下来哪些玩家,如果我们重新编号,庄家编号为 1,剩下的为 2,3,4....,那么每个人胜率其实是固定的,不会因为哪些玩家被淘汰而改变,并且这个胜率只会和之后游戏情况有关,与之前游戏情况没关系。

据此,我们考虑设 \(f_{i,j}\) 表示从第 \(n\) 轮到第 \(n-i+1\) 轮,将庄家重编号为 1,剩下的为 2,3,4... 之后,编号为 \(j\) 的人的胜率是多少。显然初值 \(f_{1,1}=1\),所求答案即 \(f_{n,i}\)。

考虑如何转移,每次我们枚举当前使用了哪一张牌,设为 \(a_j\),那么显然 \(a_j\bmod i\)(如果为 0 就置为 \(i\))这个人会被淘汰,从 \((a_j\bmod i)+1\) 这个人开始,会顺次成为下一轮的庄家,2 号,3 号...,对应的胜率就是 \(f_{i-1,1},f_{i-1,2},f_{i-1,3}...\),加上去即可,注意由于我们枚举了当前使用的牌,这里还有 \(\dfrac{1}{m}\) 的概率,因此实际要加上的概率是 \(\dfrac{1}{m}f_{i-1,1},\dfrac{1}{m}f_{i-1,2}...\)。

最后不要忘记用百分数形式输出即可。

Code:

/*
========= Plozia =========
	Author:Plozia
	Problem:P2059 [JLOI2013] 卡牌游戏

	Date:2022/10/19
========= Plozia =========
*/

#include <bits/stdc++.h>
typedef long long LL;

const int MAXN = 50 + 5;
int n, m, a[MAXN];
double f[MAXN][MAXN];

int Read()
{
	int sum = 0, fh = 1; char ch = getchar();
	for (; ch < '0' || ch > '9'; ch = getchar()) fh -= (ch == '-') << 1;
	for (; ch >= '0' && ch <= '9'; ch = getchar()) sum = (sum << 3) + (sum << 1) + (ch ^ 48);
	return sum * fh;
}

int main()
{
	n = Read(), m = Read(); for (int i = 1; i <= m; ++i) a[i] = Read();
	f[1][1] = 1;
	for (int i = 2; i <= n; ++i)
		for (int j = 1; j <= m; ++j)
		{
			int p = a[j] % i;
			for (int k = 1; k < i; ++k)
			{
				p = p % i + 1; f[i][p] += f[i - 1][k] / m;
			}
		}
	for (int i = 1; i <= n; ++i) printf("%.2lf%% ", f[n][i] * 100);
	puts(""); return 0;
}

标签:...,ch,JLOI2013,游戏,int,题解,胜率,MAXN,P2059
From: https://www.cnblogs.com/Plozia/p/16807572.html

相关文章

  • tinymce粘贴word图片问题解决
    ​ 项目需求可发布文章需求涉及到富文本编辑器经过查阅我选择了较为简便不需要后端支持可独立完成的tinymce框架官方文档也是相当完整虽然都是全英文但是有强大的......
  • POJ 1389. Area of Simple Polygons 题解
    关于扫描线的介绍可以去看OIWiki。但那上面的参考代码并不好,下面给出了带注释的POJ1389题代码。/**Title:AreaofSimplePolygons*Source:POJ*URL:htt......
  • asp.net core 3.1 引用的元包dll版本兼容性问题解决方案
    自从.netcore3.1出来后,大家都想立马升级到最新版本。我也是如此,微软也对​​.netcore3.1​​的官方组件不断升级,几乎每隔几天就会有部分元包可以升级。每次打开Nuget包管......
  • MySQL 错误码: 1067Invalid default value for ‘xxx‘问题解决
    声明,此文为转载内容,原作者地址为:https://blog.csdn.net/qq_38974638/article/details/1223005381.问题描述:错误码:1067Invaliddefaultvaluefor'gmt_create......
  • AcCoders 10665:【省选基础 模拟】魔兽世界终极版 题解
    一句话,大模拟,对着题意敲就完了。干就完了,奥利给!正正好好618行~//10665ProblemG:【省选基础模拟】魔兽世界终极版#include<iostream>#include<cstdio>#include......
  • UVA353 Pesky Palindromes 题解
    题目大意给定一个字符串,求其中本质不同的回文子串的个数。解题思路时间复杂度\(O(n^3\logn)\,/\,O(n^3)\)写法非常显然的思路,直接枚举每个子串,判断其是否是回文子......
  • Educational Codeforces Round 137 (Rated for Div. 2)题解
    比赛链接A.Password大水题,求个组合数就水掉了。点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineN1000010#definelllonglongtemplate<c......
  • Packet Tracer更改字体后命令行黑屏问题解决
    黑屏现象问题描述做PacketTracer实验时,突然感觉字体有点小,就去调整了一下字体,但是,改完发现命令行和鼠标悬停信息都变成了黑屏PacketTrac上网查阅之后只找......
  • 【题解】CF1151C Problem for Nazar(二分答案)
    【题解】CF1151CProblemforNazar距离CSP剩下10天了,据说考前写题解可以增加RP所以我来写一篇题解+水点贡献分看题解区没有用二分答案来解决这道题的,我来提供一个......
  • CF641E 题解
    前言题目传送门!更好的阅读体验?非常套路的cdq分治。思路把所有操作统一存下来。将\(x\)离散化。\(i\)能被\(j\)统计,前提是\(a_i\)的操作时间早于\(a_j\)。......