P2813 【母舰】
likztime
2018-01-30 08:16:56
```cpp
#include<cmath>
#include<cctype>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<set>
#include<stack>
#include<deque>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const int MAXN=100000+5;
int a[MAXN],b[MAXN];//a每一个防御系统的防御力,b每一个攻击力
int main() {
int m,n;//m敌防御数量,n我方攻击数量
int x=1,ans=0;// 因为下标从1开始的,x初始化为1
//ans为真实的伤害
scanf("%d%d",&m,&n);
if(n<=m) {//执行操作前先判断防御系统与攻击系统的数量
printf("0\n");
return 0;
}
for(int i=1; i<=m; ++i) {
scanf("%d",&a[i]);
}
for(int i=1; i<=n; ++i) {
scanf("%d",&b[i]);
ans+=b[i];//假设没有防御系统,意思是全部打在母舰上
}
sort(a+1,a+m+1);//从小到大的打,因为是最大伤害
sort(b+1,b+n+1);
for(int i=1; i<=n&&x<=m; ++i) {// 摧毁的数量肯定是小于等于总防御数量
if(b[i]<=a[x])//没摧毁成功就直接跳过 ,x不会上升
continue;
//能摧毁这次的防御系统,转到下一次的防御系统
x++;//增加摧毁防御系统的个数
ans-=b[i];//减去这个打破了防御的攻击系统的攻击力
}
if(x<=m)printf("0\n");//如果攻击系统全没了但是防御系统还有
else printf("%d\n",ans);
return 0;
}
```