牛客:黑龙江农垦科技职业学院喜迎寒假多校联赛2(快乐ak场)

博客介绍了如何使用C++解决两个数组区间求和问题和找出一组时间中最快完成时间的问题。对于区间求和,通过预处理数组避免遍历导致的时间超时;对于最快完成时间问题,通过比较输入数据找到最早完成任务的位置。这两个问题展示了基本的数组操作和优化技巧。
摘要由CSDN通过智能技术生成

牛客:黑龙江农垦科技职业学院喜迎寒假多校联赛2(快乐ak场)

C 题 gg查成绩

题目:
在这里插入图片描述

思路 :

输入就不用说了,关键是输出的判断,要求是 第x位 同学和 第y位 同学之间 所有的同学的成绩总和 ,如果每次输出 都遍历数组的话 会超时 !!( 错了十次才改思路 …)

所以我就在每次输入的时候把a [ 1 ] 到 a [ n ] 所有值存放在 s里面 ;

然后一个数组 b [ n ] 来存放前 n 位 a [ n ] 的和 ,我在前面先用了 s ,在后面 存放 b数组时 ,用 for循环倒着相减 (可能我觉得这样省时间吧 嘿嘿嘿 )
在这里插入图片描述

输出的时候只需要用 b [ y ] - b [ x ] 就行了
( 可能有人问为什么是 b [ y ] - b [ x ] ,因为我这次用数组 每个 第 0 位 都是没有使用,所以输入第几位就是第几位);

因为要先输入所有数据 ,所以我就用了 p数组 来存放 每次 b [ y ] - b [ x ] 的值 ;

最后再用一个for循环按顺序输出 p数组 里面的数据就行了。
在这里插入图片描述

代码:

#include <bits/stdc++.h>

using namespace std;

int a[1000005];
int b[1000005];
int p[1000005];

int main()
{
long n,m,s=0;
int x,y,t;
int i,j,k;

scanf("%ld%ld",&n,&m);

for(i=1; i<=n; i++)
{
    scanf("%d",&a[i]);
    s=s+a[i];                //用s存放a数组数据的总和
}

b[n]=s;                     //所有的 数组 第0位 都没有被使用,用 b [ n ]  存总和

for(i=n; i>0; i--)
{
    b[i-1]=b[i]-a[i];       // 倒着相减 ,依次将 前 a [ n ] 项和存进 b [ n ] 数组 里面
}

for(i=1; i<=m; i++)
{
    scanf("%d%d",&x,&y);
    p[i]=b[y]-b[x-1];       // 用 p 数组 存放每次 a[ x ] 到 a [ y ] 的和
}

for(i=1; i<=m; i++)
    printf("%d\n",p[i]);    //按顺序 输出就完事了

}

还有个J题 ( 签到题 )

就硬写 ,不用管 写它就完事了!!!

题目 :

在这里插入图片描述

思路:

要求很简单 ,就是输入一组数据( 秒数 ),然后找出 最快的( 最小的数字 ) 是哪一个 ;

如果时间相同 ,谁先说出 ( 就是最先输入且数字最小的 ),就是谁 ,输出他的位置就行了;

代码 :

#include <bits/stdc++.h>

using namespace std;

int a[10005];

int main()
{
int n,i,t,min=1000; // 让 min 等于最大边界就行或者等于你输入的第一个数据都一样

cin>>n;

for(i=0;i<n;i++)
{
    scanf("%d",&a[i]);
    
        if(a[i]<min)     // 每次输入的时候都和 min 比较  ,如果比 min 小的话 ,min 就等于这个数;
          {              // 同时 用 t 来记住 min 的位置  
             min=a[i];
             t=i+1 ;
          }
}

cout<<t;                 // 最后 输出 min 的 位置 就行了

}

.

.

没了
没了
没了

比较菜 就写了俩题 。。。。。
对 我就去签个到… 没错,签到就完事了!!

拜了拜

.

.
.

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ML_yun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值