暗影碎夜 2024-06-01 16:37 采纳率: 61.5%
浏览 16
已结题

关于#c++#的问题,请各位专家解答!

最要强的飞行员
描述

在一次电子模拟作战中,假设敌方设置了一条防线,防线上依次有n个据点。每个据点都有一个牢固值,数值越大表示越牢固。
司令部计划对n个据点进行m轮攻击,每轮攻击一段连续范围的据点,每段范围上的据点都存在一个总牢固值。
有一位最要强的飞行员,申请在总牢固值最大的一轮出战。
请你编写程序找到最大的总牢固值。

输入描述

第一行包括两个整数n和m。(1≤n,m≤500000)
第二行包括n个整数,依次表示n个据点的牢固值。(1≤整数≤100)
接下来m行,每行两个正整数L和R,表示一轮范围。(1≤L≤R≤n)

输出描述

输出一个整数,表示最大的总牢固值。

样例输入 1

7 2
2 10 5 3 6 4 9
3 5
6 7
样例输出 1

14
提示

输入样例中m=2,表示有2轮攻击。
第1轮攻击从35,总牢固值5+3+6=14。
第2轮攻击从6
7,总牢固值4+9=13。
两轮攻击总牢固值最大14。

#include<bits/stdc++.h>
using namespace std;
int main(){
    long long int n,m,q,w;
    cin>>n>>m;
    long long int a[500001]={};
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    int s[500001]={};
    for(int i=1;i<=n;i++){
        s[i]=s[i-1]+a[i];
    }
    for(int i=0;i<m;i++){
       int x,y;
        cin>>x>>y;
        cout<<s[y]-s[x-1]<<endl;
    }
    return 0;
}

想请问最后如何找到最大的总牢固值。
谢谢

  • 写回答

1条回答 默认 最新

  • 阿里嘎多学长 2024-06-01 16:45
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    要解决这个问题,我们需要对给定的代码进行一些修改。下面是修改后的代码,它将计算每一轮攻击的总牢固值,并在所有轮次结束后输出最大的总牢固值。

    #include<bits/stdc++.h>
    using namespace std;
    
    int main(){
        long long int n, m;
        cin >> n >> m;
        long long int a[500001] = {};
        for (int i = 1; i <= n; i++) {
            cin >> a[i];
        }
        long long int s[500001] = {0};
        s[0] = 0; // 初始化前缀和数组
        for (int i = 1; i <= n; i++) {
            s[i] = s[i - 1] + a[i];
        }
        
        long long int max_solid = 0; // 用于存储最大总牢固值
        for (int i = 0; i < m; i++) {
            int x, y;
            cin >> x >> y;
            long long int solid = s[y] - s[x - 1]; // 计算当前轮的总牢固值
            if (solid > max_solid) {
                max_solid = solid; // 更新最大总牢固值
            }
        }
        cout << max_solid << endl; // 输出最大总牢固值
        return 0;
    }
    

    代码解释:

    1. 我们首先读取n和m的值,然后读取每个据点的牢固值并存储在数组a中。
    2. 我们使用一个前缀和数组s来存储每个据点之前所有据点的牢固值总和。这样,我们可以通过s[y] - s[x - 1]快速计算从x到y的总牢固值。
    3. 我们初始化一个变量max_solid来存储最大的总牢固值,并将其初始值设为0。
    4. 对于每一轮攻击,我们读取攻击的范围LR,然后使用前缀和数组快速计算出这一轮的总牢固值。
    5. 如果当前轮的总牢固值大于max_solid,我们就更新max_solid
    6. 在处理完所有轮次后,我们输出max_solid,即最大的总牢固值。

    这段代码应该能够满足你的需求,找到并输出最大的总牢固值。如果你需要更多的参考资料,可以查阅C++标准库的相关文档,特别是关于vectoriostream的部分。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月9日
  • 已采纳回答 6月1日
  • 创建了问题 6月1日

悬赏问题

  • ¥15 mySQL5.7.34安装遇到的问题
  • ¥15 结构功能耦合指标计算
  • ¥20 visual studio中c语言用ODBC链接SQL SERVER
  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊