QOJ.ac

QOJ

Time Limit: 1.0 s Memory Limit: 512 MB Total points: 100 Hackable ✓

#6819. 最大唯一胜者

Statistics

$n$ 名玩家正在进行一场游戏。他们需要同时从 $1, 2, \dots, m$ 中选择一个数字,游戏结果分析如下:

  • 如果存在一个数字被且仅被 1 名玩家选择,则选择该数字中最大的玩家获胜并得 1 分;其他玩家得 $-1$ 分。
  • 否则,游戏宣布没有赢家;所有人得 0 分。

该游戏只进行一轮。为了保持公平,裁判为该游戏提出了一种新的玩法。玩家不再是简单地采取一个动作,而是向裁判提交他们的策略,即一个 $m$ 维向量 $s = (p_1, p_2, \dots, p_m)$,其中必须满足 $\sum_{j=1}^m p_j = 1$。之后,裁判开始掷骰子。对于玩家 $i$,裁判将根据 $s_i$ 均匀随机采样一个结果:以概率 $s_{i,j}$ 选择数字 $j$。在采样 $n$ 个数字后,游戏根据上述规则结束。

纳什均衡(Nash equilibrium)以数学家约翰·纳什的名字命名,是定义涉及两名或多名玩家的非合作博弈解的最常用方法。在纳什均衡中,假设每位玩家都知道其他玩家的均衡策略,且没有任何人可以通过仅改变自己的策略而获益。更准确地说,我们可以针对该游戏定义纳什均衡:给定每位玩家的 $n$ 个策略向量,如果对于每位玩家,其策略都是对其他玩家策略的最佳响应,则称其为纳什均衡。换句话说,在纳什均衡中,一个人无法通过窥探他人的策略并改变自己的策略来获得更高的期望得分。

现在,我们希望你给定 $n$ 和 $m$ 后找到一个纳什均衡。注意,你不需要最大化或最小化与得分相关的任何内容,但你必须保证没有人可以通过当场改变策略来获益。

输入格式

输入仅一行,包含两个整数 $n, m$ ($2 \le n, m \le 12$),表示这是一个涉及 $n$ 名玩家的游戏,每位玩家必须从 $1 \dots m$ 中进行选择。

输出格式

输出 $n$ 行,每行包含 $m$ 个十进制数。第 $i$ 行的第 $j$ 个十进制数 $s_{i,j}$ 表示玩家 $i$ 以概率 $s_{i,j}$ 选择数字 $j$。

你需要保证满足以下精度要求:

  • $\forall i \in \{1, \dots, n\}, \left| \sum_{j=1}^m s_{i,j} - 1 \right| < 10^{-8}$。
  • $\forall i \in \{1, \dots, n\}$,将 $s_i$ 替换为另一个策略 $s'_i$ 后,期望收益的增益不超过 $10^{-8}$。

建议在小数点后打印 10 位或更多数字以满足精度要求。

纳什证明了每个有限博弈总是存在纳什均衡。如果存在多个解,输出任意一个即可。

样例

样例输入 1

2 2

样例输出 1

0.0000000000 1.0000000000
0.0000000000 1.0000000000

样例输入 2

3 3

样例输出 2

0.2360679775 0.2360679775 0.5278640450
0.2360679775 0.2360679775 0.5278640450
0.2360679775 0.2360679775 0.5278640450

样例输入 3

3 2

样例输出 3

1.0000000000 0.0000000000
0.0000000000 1.0000000000
0.1145141919 0.8854858081

说明

第一和第二个样例的参考输出是对称的,这意味着每位玩家使用相同的策略。我们可以证明参考输出是第一个样例中唯一的纳什均衡。然而,第二个样例存在非对称解——即使玩家采取不同的策略,只要其他玩家坚持之前的选择,没有人有动力改变自己的策略。

在第三个样例中,我们为你展示了一个非对称的例子。最有趣的地方在于从玩家 3 的角度来看。固定玩家 1 和 2 的策略:

  • 如果玩家 3 选择 1,玩家 2 获胜。
  • 如果玩家 3 选择 2,玩家 1 获胜。

因此,玩家 3 的收益始终相同,即 $-1$。然而,玩家 3 的策略可以决定玩家 1 和 2 谁获胜。也可以验证,由于玩家 3 的存在,玩家 1 和 2 也没有动力改变策略。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.