首先观察数据范围
非常明显的Θ(nlog2n)的复杂度
这道题主要需要思考的是
如何保证攻击系统能打出最多的伤害
贪心策略显而易见:
选择攻击力最小的 能够击毁防御系统的系统攻击
怎么保证最
()解法无法承受
所以 ———— 排序
排序后用一个指针维护最小满足条件的攻击系统即可
Tips:
不要忘了加上前面无法满足任何需求的攻击系统的伤害作为答案
Code
我知道你们就想看这个
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 1e5+5;
int n,m,ans = 0;
int attack[maxn],defense[maxn];
int main(){
scanf("%d %d",&m,&n);
if(n <= m){printf("0");return 0;}
for(int i=1;i<=m;++i)scanf("%d",&defense[i]);
for(int i=1;i<=n;++i)scanf("%d",&attack[i]);
sort(attack+1,attack+n+1),sort(defense+1,defense+m+1);
int pa = 1;
for(int i=1;i<=m;++i){
while(attack[pa] <= defense[i] and pa <= n)ans += attack[pa++];
++pa;
if(i != m && pa == n+1){printf("0");return 0;}
}
while(pa <= n)ans += attack[pa++];
printf("%d",ans);
return 0;
}
谢谢观赏