1 条题解

  • 0
    @ 2025-8-24 22:31:31

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar kyBWE
    “时间会冲淡一切,但也只能冲淡。”

    搬运于2025-08-24 22:31:31,当前版本为作者最后更新于2021-09-12 22:51:29,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    儒略日第114514天,大美江湖一片异象,月黑风高,群星连结,正在打斗地主的人们预感到,这是一个杀蚂蚁的好日子,这些蚂蚁都是来自魔兽世界的异兽,经过讨论,他们决定继续沿用灭鼠行动的计划,这个计划是他们与一群专门研究组合数问题鸭棋爱好者共同发明的“封锁”套路,事实证明,确实有效,当晚,人们凯旋归来,为了纪念这一特殊的日子,他们发明了一种新游戏--猪国杀

    群星连结切后感

    群星连结这个题,虽然是个题目很长的尬模拟,但它的思维难度远不及PCK这么大,只是里面有亿点点细节罢了(结果我还是调了两天......)

    更好的阅读体验

    大体思路

    一个字: 。(做好心理准备,我的代码巨长无比)

    我是定义了一个结构体来存每个角色的所有信息,然后分别给 Alice 和 Bob 的角色开了一个大数组(开始写的时候没动脑子,快写完的时候才意识到可以开二维数组,用 0,10,1 来代表两人,这就导致我的码量多了一倍......),结构体如下:

    struct role
    {
    	int HP,maxHP;//每个角色的血量及血量上限 
    	int MP,maxMP;//每个角色的能量及能量上限 
    	int atk,delta_atk;//每个角色的基础攻击力和攻击力增益 
    	int def,delta_def;//每个角色的基础防御力和防御力增益 
    	int talent,talent_x,talent_y;//天赋及附加参数 
    	int skill,skill_x,skill_y,skill_z;//技能及附加参数 
    	int id,target;//角色编号及当前的攻击目标 
    	bool live,player;//是否活着以及属于哪个阵营 
    }Alice[15],Bob[15];//1:Alice, 0:Bob
    

    另外,由于优先目标不需要那么多参数,所以我另开了一个小结构体。

    struct targetrole//用于记录每个角色的优先目标 
    {
    	int id;//编号 
    	bool live;//是否活着 
    }Alicep[20][20],Bobp[20][20];
    

    然后就可以按照游戏规则一回合一回合的模了。

    1. Alice 行动阶段

    能放技能优先放技能,不能放技能就普攻。

    1. Alice 行动结束

    战后回蓝,天赋回血回蓝记得用。

    1. Bob 行动阶段

    能放技能优先放技能,不能放技能记得普攻。

    1. Bob 行动结束

    战后回蓝,天赋回血回蓝记得用。

    1. 回合结束阶段

    把技能叠加的各种攻击力,防御力buff整理一下。


    对于技能给的各种攻击力,防御力 buff ,我的处理方法是开一个时间线数组,把每回合的 buff 都存起来,然后在回合开始时加上,回合结束后再删去。

    每次有人死了我都会去判一下游戏是否结束,如果结束了立即退出。

    前面我说过,因为没动脑子所以给 Alice 和 Bob 各开了一个数组,所以我所有的行动都要给这俩人各写一份(当然如果开二维数组用 0,10,1 记录人物就不必要这么麻烦了),作为懒狗的我写完 Alice 之后就复制了一份,改了改名字就给 Bob 了(注意,这里是个伏笔)。

    这里再说一下,技能推荐单独写在一个函数里,天赋就穿插在各个阶段里(别忘了写!!!)。

    @Naptie,@completerich 血的教训)

    那些天我们掉进的坑

    1. 记录技能发动者、普攻使用者的变量没赋初值,导致数组越界喜提 54775477
    2. 同样是因为没赋初值导致 Alice 某角色一个普攻打出了高达 341341 万的高额伤害。
    3. 函数里的参数一定要加引用
    4. 当一名角色死亡后,如果血量被打成负数了,记得变回 00 ,否则可能影响结果。
    5. 角色死亡后记得把他的生死状态(如果你写了这么个东西的话)改成死,不然一定会出大问题(鞭尸也不是什么好行为对吧)。
    6. 当一名角色受伤后会立即回复一点能量,别写晚了或直接忘了写。
    7. 【天赋-血肉皮囊】可免除一半真实伤害,别忘了用,也别用错地方。
    8. 当一名角色被攻击时,不管会不会扣除生命值,都要回复一点能量。
    9. 一定要确保每个角色的优先攻击目标是活着的。
    10. 【技能:心态崩了!】虽然没什么卵用,但是也能发动。
    11. 当有人发动【技能:格林炸裂!】时,受击角色是先受击回蓝,再受技能效果扣除能量,扣除的是当前能量1010%
    12. 【技能:天楼霸断剑!】中的 HP enemy 是最大生命值,不是当前生命值。
    13. 【技能:天狼噬斩!】的防御力减益只针对发动者的优先目标一人,而且是永久性的。
    14. 【技能:全力超全开!轮回之终末!】提升的是基础攻击力基础防御力
    15. 【技能:全力超全开!轮回之终末!】发动后记得把所有人(包括自己)的技能 1010 改成技能 00
    16. 所有的技能 buff (回蓝,攻击力、防御力加成)都是在技能结束后立即生效,而不是等整个大回合结束,顺序错了很容易 gg 。
    17. 用完技能后记得先把能量清空,再进行技能后回蓝。
    18. 普攻和技能每回合只能选一个发动,记得判一下放什么。
    19. 角色的血量和能量都不能超过上限。
    20. 【技能:全力超全开!轮回之终末!】生效的最后一回合要完整的进行完,也就是说是在最后一回合结束后在结束游戏,而不是最后一回合开始。

    小结

    • 与能量值有关:受击回蓝,己方行动结束回蓝,发动技能或普攻回蓝,【天赋-心胜于物】,【天赋-科技至上】,【技能:格林炸裂!】,【技能:演出开始!】,【技能:全力超全开!轮回之终末!】。

    • 与回复血量值相关:【天赋-心胜于物】,【天赋-科技至上】,【技能:极光绽放!】,【技能:精灵庇护!】,【技能:全力超全开!轮回之终末!】。

    • 只有真实伤害:【天赋-血肉皮囊】(减伤),【天赋-超凡入圣】,【技能:日(zhou)昇(ji)之(dao)雨(dan)!】,【技能:天狼噬斩!】,【技能:地(太)球(虚)蓝(苍)色(蓝)闪(闪)电!】。

    • 只有普通伤害:【技能:格林炸裂!】,【技能:天楼霸断剑!】,【技能:流星!】。

    • 真实伤害加普通伤害:【天赋-星河力量投射】。

    • 与攻击力增/减益相关:【技能:地(太)球(虚)蓝(苍)色(蓝)闪(闪)电!】,【技能:极光绽放!】。

    • 与防御力增/减益相关:【技能:天狼噬斩!】,【技能:流星!】,【技能:精灵庇护!】。

    • 与基础攻击力/防御力相关:【技能:全力超全开!轮回之终末!】。

    哪里出了问题可以对照着去看一下对应的部分有没有写挂掉。


    最后的最后

    巨长无比的代码

    • 小彩蛋:还记得前面的伏笔吗?对,技能那部分我复制过来之后少改了一个名字,导致我卡在 4242 分死活调不出来(果然学 OI 不需要视力)。
    • 1

    信息

    ID
    6786
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者