Swordsman
题意
给你一个n,代表有n个队伍,一个k,代表每个队伍中有k个战士,对应k个经验值,我方队伍中也有k个战士。
输入我方战士的k个战斗力,
接下来每一行输入敌方每个队伍k个战士的战斗力,打败k个战士后可以得到的经验值。
只有我方k个战士的战斗力均对应大于敌方某个队伍中k个战士的战斗值,才能得到相应的k个经验,提升战斗力,然后接着跟其他的队伍打。
问你我方战士每个人最后最多能为多少战斗力?
k<=5,n<=1e5,保证得到的战斗力在int范围内。
思路
首先由于读入数据大,先来个读入挂。
然后我们可以对每一种敌方战士(列),建立k个优先队列,以战斗值小为上。
然后不断循环,每次从第1个战士开始和第1个队列中的敌方战士打,如果强于他,就弹出这个战士,并记录这个战士对应的队伍中的战败情况,一旦他们的队伍全军覆没,我方每个战士就可以得到相应的经验值,然后和第i个队列中的战士打,一直到i=k为止,结束一轮循环。
然后一直循环直到某一次循环中不再有打赢他们的情况出现。
看!代码
1 |
|