P2813 母舰
-------------------------------------------
链接:P2813
-------------------------------------------
一道贪心练手题,数据很水,我把边界条件写错了都是90分
-------------------------------------------
思路很简单,读入后sort一边,根据贪心,我们用两个指针,指向开头,然后开始比较。
如果能摧毁,就++,检查下一个。
如果不能,就把攻击力先加到ans里,检查下一个攻击力
这样如果最后没有防御了,我们就只需要把剩下的攻击力加上就行了。
如果还有,就挂了,输出零。
---------------------------------------------
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 int n,m; 6 int a[1000001]; 7 int b[1000001]; 8 int ans; 9 int main(){ 10 scanf("%d%d",&m,&n); 11 for(int i=1;i<=m;++i) 12 cin>>b[i]; 13 sort(b+1,b+m+1); 14 for(int j=1;j<=n;++j) 15 cin>>a[j]; 16 sort(a+1,a+n+1); 17 int x=1; 18 int y=1; 19 while(x<=n&&y<=m){ 20 if(a[x]>b[y]){ 21 x++; 22 y++; 23 } 24 else{ 25 ans+=a[x]; 26 x++; 27 } 28 } 29 if(y>m){ 30 while(x<=n){ 31 ans+=a[x]; 32 x++; 33 } 34 cout<<ans; 35 return 0; 36 } 37 else{ 38 cout<<0; 39 return 0; 40 } 41 return 0; 42 }