#P1303. Byte Me!
Byte Me!
本题没有可用的提交语言。
描述
你是拉斯维加斯第一家全二进制赌场 “唯一(The One)” 的一名发牌员。“唯一” 赌场的特别之处在于,它的二十一点赌桌不用扑克牌,而是使用字节(一个 8 位序列,代表 0 到 255 之间的一个数)和半字节(一个 4 位序列,代表 0 到 15 之间的一个数)。
一整天,你都在代表赌场与一个个对手进行对局。当然,赌场老板熟知相关统计数据,他们为你设计了一种策略,让赌徒们赢得的几率略低于五五开。
以下是二进制二十一点的游戏规则:
- 游戏的目标是成为最接近 510 分且不超过 510 分的玩家。
- 每位玩家会拿到两个字节,一张明牌和一张暗牌。
- 然后玩家有机会要更多的字节(通过说 “Byte Me!”)或者更多的半字节(通过说 “Nibble Me!”),直到达到 4 次要牌上限,或者显示的分数超过 510 分。
- 所有要的牌都是明牌。
- 如果玩家的分数超过 510 分,他就会立即爆牌并输掉这一局。
- 发牌员最后要牌。
- 若出现平局,发牌员获胜(这包括所有人都爆牌的平局情况)。
发牌员的规则如下(按优先级排列,数字较小的规则优先于数字较大的规则):
- 当仅通过观察自己的手牌以及其他玩家的明牌就能确定已经获胜时,绝不进行要牌操作。
- 如果你的总分严格小于 382 分,要一个字节的牌。
- 如果你的总分小于或等于 500 分,要一个半字节的牌。
- 不再要牌。
输入
本题的输入将由一系列(非空)最多 100 个数据集组成。每个数据集将按照以下描述进行格式化,并且数据集之间不会有空白行。
单个数据集包含 6 个部分:
- 起始行:一行内容为 “START N”,其中 N 是参与这一局游戏的玩家数量(不包括发牌员)。非发牌员玩家数量绝不会超过 10 个,并且发牌员不会单独进行游戏。
- 发牌员行:一行包含两个恰好 8 位的二进制字符串,中间由一个空格分隔。这两个字符串代表发牌员手中的两张牌。
- 玩家行:一行包含 N 个 8 位的二进制字符串,每个字符串之间由一个空格分隔。这些字符串代表所有非发牌员玩家的明牌。
- 字节行:一行包含 4 个 8 位的二进制字符串,每个字符串之间由一个空格分隔。这些字符串代表字节牌堆中的接下来 4 个字节,按照抽取的顺序排列。
- 半字节行:一行包含 4 个 4 位的二进制字符串,每个字符串之间由一个空格分隔。这些字符串代表半字节牌堆中的接下来 4 个半字节,按照抽取的顺序排列。
- 结束行:一行内容为 “END”。
在最后一个数据集之后将有一行内容为 “ENDOFINPUT”。
以下是一些其他有用的信息:
- 奇怪的是,每位非发牌员玩家的暗牌总是 11111111,其值为 255,但发牌员并不知道这一点。
- 除发牌员之外的玩家从不进行要牌操作(他们不太聪明)。
输出
计算发牌员采取的行动以及发牌员在最终手牌下的胜负情况。
对于每个数据集,将恰好有一个输出集,包含以下部分:
- 手牌行:一行内容为 “HAND N”,其中 N 是参与这一局游戏的玩家数量(不包括发牌员)。
- 发牌员要牌列表:发牌员在其回合每进行一次要牌操作,就会打印一行。如果要的是字节牌,打印一行 “Byte me!”,如果要的是半字节牌,打印 “Nibble me!”。
- 结果行:一行内容,如果发牌员获胜则为 “Win!”,如果发牌员因爆牌而输掉则为 “Bust!”,如果发牌员在未爆牌的情况下输掉则为 “Lose!”。
输入示例
START 1
11111111 11111111
00000001
10101010 01010101 11110000 00001111
1010 0101 1100 0011
END
START 1
10111110 10111111
11111110
00010010 10101010 01010101 11110000
0001 1010 1100 0011
END
START 8
11111111 00001000
00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111
00010010 10101010 01010101 11110000
0001 1010 1100 0011
END
ENDOFINPUT
输出示例
HAND 1
Win!
HAND 1
Byte me!
Nibble me!
Nibble me!
Nibble me!
Lose!
HAND 8
Win!
来源
美国中南部 2002 年