T213512 俞进烨大神AKIOI之咸鱼斗争
题目背景
俞大仙梦见自己 AKIOI 后,创出了一种游戏,名叫"咸鱼斗争".
题目描述
咸鱼斗争的游戏规则非常复杂,下面慢慢介绍.
游戏中每名玩家都代表着一种鱼,咸鱼王,咸鱼将军和咸鱼叛党.
## 游戏目的
咸鱼王 MP:自己存活的情况下消灭所有的咸鱼叛党。
咸鱼将军 ZP:不惜一切保护咸鱼王,胜利条件与咸鱼王相同。
咸鱼叛党 FP:杀死咸鱼王。
## 游戏过程
游戏开始时,每个玩家手里都会有 4 张牌,且生命值上限和初始生命值都是 4 。
开始游戏时,从咸鱼王开始,按照玩家编号从小到大的顺序(即从 1 到 n)出牌.
每个玩家自己的回合可以分为 2 个阶段:
**摸牌阶段**:从牌堆顶部摸 2 张牌,依次放到手牌的最右边.
**出牌阶段**:你可以使用任意张牌,每次使用牌的时候都使用最靠左的能够使用的牌。当然,要满足如下规则:
1. 如果没有咸鱼圣剑,每个出牌阶段只能使用 1 次「天剑诀」来攻击;
2. 任何牌被使用后被弃置(武器是装备上);被弃置的牌以后都不能再用,即与游戏无关。
## 各种牌介绍
每张手牌用 1 个字母表示,字母代表牌的种类。
### 基本牌
『回春药(P)』在自己的回合内,如果自己的生命值不等于生命值上限,那么使用 1 瓶回春药可以为自己恢复 1 点生命,否则不能使用回春药;回春药只能对自己使用;在自己的回合外,如果自己的生命值变为 0 或者更低,那么也可以使用。
『天剑诀 (K)』在自己的回合内,对攻击范围内除自己以外的 1 名角色使用。如果没有被『灵犀一指』抵消,则造成 1 点伤害。无论有无武器,天剑诀的攻击范围都是 1。
『灵犀一指 (D)』当你受到天剑诀的攻击时,可以弃置 1 张灵犀一指来抵消天剑诀的效果。
### 锦囊牌
『破空一剑 (F)』出牌阶段,对除自己以外任意 1 名角色使用,由目标角色先开始,自己和目标角色轮流弃置 1 张天剑诀,首先没有天剑诀可弃的一方受到 1 点伤害,另一方视为此伤害的来源。
『北鱼突击 (N)』出牌阶段,对除你以外所有角色使用,按逆时针顺序从使用者下家开始依次结算,除非弃置 1 张天剑诀,否则受到 1 点伤害。
『万鱼齐跳 (W)』和北鱼突击类似,不过要弃置的不是天剑诀而是灵犀一指。
### 装备牌
『咸鱼圣剑 (Z)』武器,攻击范围 1 ,出牌阶段你可以使用任意张天剑诀; 同一时刻最多只能装 1 把武器;如果先前已经有了 1 把武器,那么之后再装武器的话,会弃置以前的武器来装现在的武器。
## 特殊事件及概念解释
**伤害来源**:天剑诀、北鱼突击、万鱼齐跳的伤害来源均是使用该牌的玩家,决斗的伤害来源如上;
**距离**:两个玩家的距离定义为沿着逆时针方向间隔的玩家数 +1 。即初始时 1 和 2 的距离为 1 ,但是 2 和 1 的距离就是 n-1 。注意一个玩家的死亡会导致一些玩家距离的改变;
**玩家死亡**:如果该玩家的生命值降到 0 或者更低,并且自己手中没有足够的回春药使得自己的生命值回到 1 ,那么就死亡了,死亡后所有的牌(装备区,手牌区)被弃置;
**奖励与惩罚**:咸鱼叛党死亡时,最后一个伤害来源处立即摸 3 张牌。咸鱼将军死亡时,如果最后一个伤害来源是咸鱼王,那么咸鱼王所有装备牌、手牌被弃置。
注意:一旦达成胜利条件,游戏立刻结束,因此即使会摸 3 张牌或者还有牌可以用也不用执行了。
现在,我们已经知道每个玩家的角色、手牌,还有牌堆初始情况,并且假设每个角色会按照如下的行为准则进行游戏,你需要做的就是告诉该题的输入数据最后的结果。
## 几种行为
**表敌意**:对某个角色使用天剑诀、破空一剑。
**跳忠**:即通过行动表示自己是咸鱼将军。跳忠行动就是对咸鱼王或对某只已经咸鱼将军献殷勤,或者对某个已经跳反的咸鱼叛党意;
**跳反**:即通过行动表示自己是咸鱼叛党。跳反行动就是对咸鱼王或对某个已经跳忠的咸鱼将军表敌意,或者对某个已经跳反的咸鱼叛党献殷勤。
注意:咸鱼将军不会跳反,咸鱼叛党也不会跳忠;不管是谁,能够跳必然跳。
## 行动准则
### 共性
每个角色如果手里有回春药且生命值未满,那么必然吃掉;
有北鱼突击、万鱼齐跳、必然使用;有装备必然装上;
受到天剑诀时,有灵犀一指必然弃置;
响应北鱼突击或者万鱼齐跳时候,有天剑诀/ 灵犀一指必然弃置;
不会对未表明身份的玩家献殷勤(包括自己)。
### 特性
#### 咸鱼王:
咸鱼王会认为「没有跳身份,且用北鱼突击 / 万鱼齐跳对自己造成伤害的玩家」是间谍(没伤害到不算,注意间谍并没有表明身份),如果之后跳了,那么咸鱼王会重新认识这个玩家;
对于每种表敌意的方式,对逆时针方向能够执行到的第一只间谍或者已跳咸鱼叛党表;如果没有,那么就不表敌意;
破空一剑时会不遗余力弃置天剑诀;
如果能对已经跳忠的玩家或自己献殷勤,那么一定献;如果能够对已经跳反的玩家表敌意,那么一定表。
#### 咸鱼将军:
对于每种表敌意的方式,对「逆时针方向能够执行到的第一只已经跳反的玩家」表,如果没有,那么就不表敌意;
破空一剑时,如果对方是咸鱼王,那么不会弃置天剑诀,否则,会不遗余力弃置天剑诀;
如果有机会对咸鱼王或者已经跳忠的玩家献殷勤,那么一定献。
#### 咸鱼叛党:
对于每种表敌意的方式,如果有机会则对咸鱼王表,否则,对「逆时针方向能够执行到的第一个已经跳忠的玩家」表,如果没有,那么就不表敌意;
破空一剑时会不遗余力弃置天剑诀;
如果有机会对已经跳反的玩家献殷勤,那么一定献。
输入格式
输入文件第一行包含两个正整数 n ($2 \leqslant n \leqslant 10$) 和 m ($m \leqslant 2000$),分别代表玩家数和牌堆中牌的数量。若牌数量不够,抽取的牌默认为**牌堆最后一张**。
接下来 n 行,每行 5 个字符串,依次表示对第 i 只猪的角色和初始 4 张手牌描述。编号为 1 的肯定是主猪。
再接下来一行,一共 m 个字符串,按照从牌堆顶部到牌堆底部的顺序描述每张牌。
注意:所有的相邻的两个字符串都严格用 1 个空格隔开,行尾没有多余空格。
输出格式
输出数据第一行包含一个字符串代表游戏结果。如果是咸鱼王胜利,那么输出 MP ,否则输出 FP 。数据保证游戏总会结束。
接下来 n 行,第 i 行是对第 i 个玩家的手牌描述(注意只需要输出手牌),按照手牌从左往右的顺序输出,相邻两张牌用 1 个空格隔开,行末尾没有多余空格。如果这个玩家已阵亡,那么只要输出 DEAD 即可。
注意:如果要输出手牌而没有手牌的话,那么只需输出 1 个空行。
说明/提示
抄题解的分数作废!!!