2505:Kingdom Rush

时间限制:2 S   /  内存限制:65536 KB
AC:130   /  Submit:260
问题描述

故事的背景是这样的:在一个王国里有 n 名士兵,每个士兵都有一个战斗力。有一天,一名巫师告诉国王,她预测到在接下来的m天里,每天都会有一个怪物来攻城。于是国王决定:在这m天里,每天派出一个刚好能打过这个怪物的士兵去迎战。假设怪物的战斗力为a,那么国王会在所有士兵中选出战斗力大于a的最弱的士兵,如果找不到任何一个士兵战斗力大于a,那么国王就会派出战斗力最强的三个士兵去迎战(三英战吕布)。如果采用了1对1的作战方式,那么在作战完毕后,那个士兵的战斗力会下降a点;如果采用了3对1的作战方式,那么这三个士兵就会在战斗中牺牲。你的任务是,在这m天战斗结束以后,帮国王统计存活士兵的信息。

输入描述

第一行有两个正整数 n 和 m ,分别表示士兵的数量和战斗的天数。(1 <= m <= 10000,3m <= n <= 100000)

第二行有 n 个正整数 a[i] 表示第 i 个士兵的战斗力。(1 <= a[i] <= 1e9)

第三行有 m 个正整数 b[i] 表示第 i 天的怪物的战斗力。(1 <= b[i] <= 1e9)

输出描述

由战斗力从小到大的顺序输出存活士兵的战斗力和人数,两者之间用空格隔开,最后换行。

例如:最后还剩五个士兵,战斗力分别为1、1、2、5、3,你应该按照“战斗力 人数”的格式对他们进行输出。

1 2 // 战斗力为1的士兵有两个

2 1 // 战斗力为2的士兵有一个

3 1 // 战斗力为3的士兵有一个

5 1 // 战斗力为5的士兵有一个

样例输入复制样例

6 2

1 2 3 4 5 6

5 6

样例输出

1 2

2 1

提示说明

第一天怪物的战斗力为5,所以战斗力为6的士兵去迎战,战斗结束后,这名士兵的战斗力变成 6 - 5 = 1。

第二天怪物的战斗力为6,此时找不到战斗力大于6的士兵,所以战斗力为3、4、5的三名士兵会去迎战,光荣牺牲。

最后只剩下两个战斗力为1的士兵和一个战斗力为2的士兵。

相关

题单#2(C++ STL)


Copyright 2016 - 2024 XUJC ACM Team
闽ICP备2020022076号-1