P2813 【母舰】

2018-01-30 08:16:56


#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;
}