题目链接:P2813 母舰 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn
题目大意:
攻打对方的防御体系,找出最大的伤害值(是不是听得云里雾里的?往下看给你解释)
思路:
模拟
坑点;
一、每个攻击系统只能打一个防御系统,打完了就没了。
二、我方的攻击系统的攻击力或者是敌方的防御系统的防御力可能为0。
三、要用尽量小的打他的防御系统,因为大的要放后面打母舰。
我特别迷这些点是怎么从题上看出来的,我咋就没读出来这些信息
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int tf[10000000],wf[10000000];
int m,n,s,i,t;
int main()
{
cin>>m>>n;//输入敌方的防御系统数量和我方的攻击系统数量
for(i=1;i<=m;i++)scanf("%d",&tf[i]);//输入敌方的防御系统的防御力
for(i=1;i<=n;i++)scanf("%d",&wf[i]);//输入我方的攻击系统的攻击力
sort(tf+1,tf+1+m);//进行排序。(注意:这里要从小到大,否则就不能用尽量小的来打敌方的防御系统,留大的来打母舰。)
sort(wf+1,wf+1+n);//进行排序。(注意:这里要从小到大,否则就不能用尽量小的来打敌方的防御系统,留大的来打母舰。)
t=1;//定义敌方现有的,最小的防御系统的防御力
for(i=1;i<=n;i++)
{
if(tf[t]==0)t++;//要特别注意这里!!!否则其实没有防御系统,程序也自动把他当成有0的防御力的防御系统。
if(tf[t]<wf[i]&&tf[t]!=0){wf[i]=0;t++;}//再判断一下当前的攻击系统能打破敌方现有的,最小的防御系统。如果能就清0做标记,并且换下一个防御系统进行攻打。
}
if(t<=m){cout<<0;return 0;}//如果打不完防御系统就一点伤害都没有。
for(i=1;i<=n;i++)s+=wf[i];//否则就是有伤害,把剩下的攻击系统的攻击力加起来,这些就是可以打到 母舰的攻击系统。
cout<<s;//输出最多能打多少伤害
return 0;
}
总结:
真是的,我都看不出来这些信息