P2813 【母舰】

likztime

2018-01-30 08:16:56

Solution

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