- 题目简介:
P2482 猪国杀 是一道非常好特别费劲的大模拟。做这道题的时候一定要认真查看每一处细节。按照题意模拟即可。写题解的其他大佬们一两百行就过了,我这个蒟蒻打了300行才过......
这个题可以用数组,也可以用链表,不过我建议使用链表而不是数组,因为用数组处理Pig的删除和卡牌的删除这两个操作有点麻烦。下面是题目讲解,大佬们勿喷。
- 题解正文:
1.三种Pig各自的特点:
MP[主猪]:
- 游戏开始时所有Pig就已经知道MP的身份,所以init函数要在游戏开始前把MP的way设为1(跳忠)。
- MP有可能会去攻击way为3的Pig(类反猪),需要特殊处理。
- MP也会攻击FP。
- 如果MP寄了游戏结束。
ZP[忠猪]:
- 当MP对ZP使用F时,ZP只能被动挨打,真惨不能使用K。
- 只会攻击已经跳反的Pig。
- 如果跳忠就把它的way设为1。
FP[反猪]:
- 只会攻击已经跳忠的Pig。
- 只会对MP使用F。
- 如果跳反就把它的way设为2。
- 如果所有的FP都寄了就游戏结束。
2. 八种牌的注意事项:
P[桃]:
- P只能在自己回合或者血量小于等于0的时候才可以使用。在自己回合时血量最多可以回满,但在其它Pig的回合时最多将血量恢复到1。
K[杀]:
- 如果没有Z每回合只能打一张K。
- 对方使用F或N的时候会不予余力的弃置(MP攻击ZP除外)。
- 使用后要查看游戏是否结束。
- 只能在条件成立时攻击逆时针数第一只Pig。
D[闪]:
- 对方使用K或W的时候会不予余力的弃置。
F[决斗]:
- 使用F的Pig(攻击方)有可能会寄掉(Pig真聪明),如果寄掉的话要立刻停止关于它的所有函数。
- 需要判断攻击方和被攻击方卡牌的变化:干掉FP会摸三张牌和MP干掉ZP的话MP的牌会被清空这两种情况。
- 要注意双方K的消耗,被攻击方先出K。如果攻击方的K的数量 < 被攻击方的K的数量的话,因为被攻击方先出K,所以被攻击方要消耗攻击方的K的数量+1张K,否则攻击方要消耗被攻击方的K的数量张K。
- 使用后要查看游戏是否结束。
N[南猪入侵] 和 W[万箭齐发]:
(这两种卡本质上时一样的,可以直接合并)
- 只要还有N和W就会不断出直到游戏结束或出完。
- 分清这两种卡分别使用哪种卡来抵消(N用K抵消,W用D抵消)。
- 每循环到一只Pig就要查看游戏是否结束。
- 如果攻击方没有表明身份就要把它的way设为3(类反猪)。
Z[猪哥连弩]:
- 在遇到第一个K时判断是否已经装备Z,如果没有Z就从头到尾全部搜索一遍,一旦遇到Z就停止查找并装备上。
- 在搜到Z时就将它装备上。
J[无懈可击]:
- 使用前要看对方的身份,在通过自己的身份来确定为跳忠或跳反。
- 忠猪不会跳反,反猪不会跳忠,需要使用的时候会不予余力的弃置。Pig们会在符合条件的情况下不断出J直到出完。
- 不会对未表明身份的Pig献殷勤或表敌意,包括自己。
- 因为无懈可击可以被无懈可击给无懈可击掉,所以需要不断的循环直到没有Pig出无懈可击时才能结束判断。
- 全场只要有Pig出F,W,N和J这4种牌就运行。
3. 一些细节:
- 输出游要戏结果的时候要注意最后面几只寄掉的Pig,要再额外再开一个for循环输出DEAD。