P2813 母舰洛谷 c/c++ 详细注解

9 篇文章 0 订阅

文章目录

3.P2813 母舰

  • 题目描述

    -在这里插入图片描述

  • 思路:

    • 先说主体思路:
      1. 建立两个数组,分别存入攻击系统和防御系统
      2. 将两个数组进行从小到大排序
      3. 每次比较以后,将用于打破防御系统的攻击系统值赋值为0
      4. 最后求和攻击系统的值,所得值即为造成伤害
  • 代码

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>

using namespace std;

const int N = 100010;

int n , m ;

int q1[N] , q2[N];

//快速排序算法模板背诵
void quick_sort(int q[] , int l , int r){

    if(l >= r) return ;

    int x = q[(l+r)/2];

    int i = l - 1 , j = r + 1;
    while(i < j){

        do i++ ; while(q[i] < x);
        do j-- ; while(q[j] > x);

        if(i < j ){
            swap(q[i],q[j]);
        }
    }
    quick_sort(q,l,j);
    quick_sort(q,j+1,r);

}

int main(){

   cin >> n >> m;

   for(int i = 0 ; i < n ; i++) scanf("%d",&q1[i]);

   for(int i = 0 ; i < m ; i++) scanf("%d",&q2[i]);

   quick_sort(q1,0,n-1);
   quick_sort(q2,0,m-1);
//
//   代码易错点分析:
//    1. flag的作用 :判断当前 防御是否能被攻破 ,不能攻破的话直接输出 0
//    2. j 变量声明在外层的作用 : 避免重复比较 ,减少循环次数 ,  提高效率
//       防御 和 攻击 系统都是按照从小到大进行排序
// 在索引为i的防御系统 找到符合条件索引为j的攻击系统后 下一个防御系统能找到符合条件的攻击系统索引肯定在j之后 ,所以攻击系统的遍历可以从j开始。
  int j = 0;
  for(int i = 0 ; i < n ; i++){
     bool flag = false;

     for(;j < m ; j++){
          if(q2[j] > q1[i]){
          	 flag = true;
             q2[j] = 0;
             break;
          }
     }

    if(!flag){
    	printf("0\n");
	    return 0;
    }

  }
   int sum = 0;

   for(int i = 0 ; i < m ; i++) sum += q2[i];

   cout << sum << endl ;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值