#P1303. Byte Me!

Byte Me!

本题没有可用的提交语言。

描述

你是拉斯维加斯第一家全二进制赌场 “唯一(The One)” 的一名发牌员。“唯一” 赌场的特别之处在于,它的二十一点赌桌不用扑克牌,而是使用字节(一个 8 位序列,代表 0 到 255 之间的一个数)和半字节(一个 4 位序列,代表 0 到 15 之间的一个数)。

一整天,你都在代表赌场与一个个对手进行对局。当然,赌场老板熟知相关统计数据,他们为你设计了一种策略,让赌徒们赢得的几率略低于五五开。

以下是二进制二十一点的游戏规则:

  1. 游戏的目标是成为最接近 510 分且不超过 510 分的玩家。
  2. 每位玩家会拿到两个字节,一张明牌和一张暗牌。
  3. 然后玩家有机会要更多的字节(通过说 “Byte Me!”)或者更多的半字节(通过说 “Nibble Me!”),直到达到 4 次要牌上限,或者显示的分数超过 510 分。
  4. 所有要的牌都是明牌。
  5. 如果玩家的分数超过 510 分,他就会立即爆牌并输掉这一局。
  6. 发牌员最后要牌。
  7. 若出现平局,发牌员获胜(这包括所有人都爆牌的平局情况)。

发牌员的规则如下(按优先级排列,数字较小的规则优先于数字较大的规则):

  1. 当仅通过观察自己的手牌以及其他玩家的明牌就能确定已经获胜时,绝不进行要牌操作。
  2. 如果你的总分严格小于 382 分,要一个字节的牌。
  3. 如果你的总分小于或等于 500 分,要一个半字节的牌。
  4. 不再要牌。

输入

本题的输入将由一系列(非空)最多 100 个数据集组成。每个数据集将按照以下描述进行格式化,并且数据集之间不会有空白行。

单个数据集包含 6 个部分:

  1. 起始行:一行内容为 “START N”,其中 N 是参与这一局游戏的玩家数量(不包括发牌员)。非发牌员玩家数量绝不会超过 10 个,并且发牌员不会单独进行游戏。
  2. 发牌员行:一行包含两个恰好 8 位的二进制字符串,中间由一个空格分隔。这两个字符串代表发牌员手中的两张牌。
  3. 玩家行:一行包含 N 个 8 位的二进制字符串,每个字符串之间由一个空格分隔。这些字符串代表所有非发牌员玩家的明牌。
  4. 字节行:一行包含 4 个 8 位的二进制字符串,每个字符串之间由一个空格分隔。这些字符串代表字节牌堆中的接下来 4 个字节,按照抽取的顺序排列。
  5. 半字节行:一行包含 4 个 4 位的二进制字符串,每个字符串之间由一个空格分隔。这些字符串代表半字节牌堆中的接下来 4 个半字节,按照抽取的顺序排列。
  6. 结束行:一行内容为 “END”。

在最后一个数据集之后将有一行内容为 “ENDOFINPUT”。

以下是一些其他有用的信息:

  1. 奇怪的是,每位非发牌员玩家的暗牌总是 11111111,其值为 255,但发牌员并不知道这一点。
  2. 除发牌员之外的玩家从不进行要牌操作(他们不太聪明)。

输出

计算发牌员采取的行动以及发牌员在最终手牌下的胜负情况。

对于每个数据集,将恰好有一个输出集,包含以下部分:

  1. 手牌行:一行内容为 “HAND N”,其中 N 是参与这一局游戏的玩家数量(不包括发牌员)。
  2. 发牌员要牌列表:发牌员在其回合每进行一次要牌操作,就会打印一行。如果要的是字节牌,打印一行 “Byte me!”,如果要的是半字节牌,打印 “Nibble me!”。
  3. 结果行:一行内容,如果发牌员获胜则为 “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 年