摘要:
题目来源于LeetCode的一道竞赛题
(链接:https://leetcode-cn.com/circle/article/EJf9yW/)
1.分析题目:
题目描述 小李的同事们很喜欢玩狼人杀,每次都找他当法官。小李觉得很累,决定写一个程序来跑出狼人杀的结果。 狼人杀是一个桌游。常见局由 12 名玩家和 1 名法官组成。12 名玩家坐成一个圈。每个玩家在游戏开始时随机抽取一张角色卡牌,只能知道自己的身份。 玩家分为两个阵营,狼人和村民。 狼人的胜利条件是 狼人阵营的玩家数 >= 村民阵营的玩家数 村民的胜利条件是 所有狼人出局 游戏过程 游戏分为夜晚和白天。 (夜晚) 拿到狼人身份的玩家睁眼,其他人闭眼。狼人们商量后选择一名玩家击杀; (白天) 所有人睁眼; 法官宣布昨晚出局的玩家,以及熊是否咆哮了; 出局的玩家离开游戏,发动技能(如果有); 法官检查胜利条件,如果任何一个满足则结束游戏; 在场玩家进行一轮发言,并票选最可疑的玩家出局; 被选中的玩家离开游戏,发动技能(如果有); 法官检查胜利条件,如果任何一个满足则结束游戏; 重复 1; 游戏角色 【村民阵营】x8 村民(villager, 下称"vil") x5:没有特殊技能 猎人("hunter") x1:技能是在出局时(被投票或被狼人击杀)可以向所有人亮出底牌选择带走一名玩家 白痴("idiot") x1:技能是在白天被投票出局后自动亮出底牌并且不出局 驯熊人(bear tamer, 下称"bear") x1:(简称熊)每天夜里,如果相邻两名存活玩家有任何一个是狼人,熊会发出咆哮。如果驯熊人已经死亡,则这一局熊不再咆哮。驯熊人如果当晚被杀,熊也不会咆哮。(相邻指向左找第一名存活玩家和向右找第一名存活玩家,当晚被杀的玩家也视为死亡) 【狼人阵营】x4 狼人(werewolf, 下称"ww") x4:可以知道同伴,但不知道好人的具体角色。 对于所有人: 白天可以投票 除了发言的环节,玩家不能发言或者交换信息 模拟器设定 我们用 c 来模拟每名玩家在游戏开始时在他人眼中的可信度。0 < c < 100 。越小则越像狼人 狼人只击杀非狼人,并且在场玩家知晓这点 在投票环节,c 最低的玩家出局。如果有多个目标,则座位号小号出局。 狼人优先击