该问题要求模拟一系列“玩家1对1对战”的过程,每轮选择当前生命值最小且不为0的两名玩家进行PK,直到无法匹配出两名玩家或所有玩家生命值归零。
显然,每轮都要快速地找到当前生命值最小的两名玩家,因此可以使用 优先队列(最小堆) 来维护玩家集合。
(life, id) 为键插入最小堆。在一款对战游戏中,共有 N 名玩家。每名玩家都有一个整数生命能量值 lifePower,初始值可以为 0,表示该玩家不会被选入 PK。玩家按照 1 到 N 编号;当生命能量值相同时,编号较小的玩家会被优先选中。
游戏会进行若干轮 1 对 1 的 PK,直到无法继续。每一轮规则如下:
0 的玩家中,选择生命能量值最小的两名玩家进行 PK。0,并立即退出游戏。3 倍。膨胀后的生命能量值如果超过 231−1,则会被限制为 231−1。胜者以膨胀后的生命能量值继续留在游戏中,败者退出游戏。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册