每日算法题-蓝桥杯真题

本文介绍了蓝桥杯比赛中两道关于算法的习题,涉及前缀和的概念在求和问题中的应用,并提供了完整代码示例。第一题是求和问题,通过观察发现可以利用前缀和的思想解决;第二题是刷题统计,讲述了如何处理数据溢出和类型转换问题。作者强调算法基础和大量练习的重要性。
摘要由CSDN通过智能技术生成

目录

前言

一、前缀和习题

习题- [蓝桥杯 2022 省 A] 求和

题目链接

题目描述

题目讲解

完整代码

二、模拟习题

习题-[蓝桥杯 2022 省 B] 刷题统计

题目链接

题目描述

题目讲解

完整代码

总结


前言

蓝桥杯全国软件和信息技术专业人才大赛,是由工业和信息化部人才交流中心举办的全国性IT学科赛事。全国1200余所高校参赛,累计参赛人数超过40万人。蓝桥杯大赛连续两年被列入中国高等教育学会发布的“全国普通高校学科竞赛排行榜”,是高校教育教学改革和创新人才培养的重要竞赛项目。对大学生综合评测,奖学金评定,升学考研都有一定助益。

但是如何进行蓝桥杯赛事,系统地了解基本算法,然后多练多写!!!

下面就对两道真题进行讲解和完整代码展现。


一、前缀和习题

习题- [蓝桥杯 2022 省 A] 求和

题目链接

P8772 [蓝桥杯 2022 省 A] 求和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述

题目讲解

首先,拿到本题后,直接暴力运算,一定会超时!!!

那么,我们要怎么理解本题呢?

我们先看一下:

S=a1*a2+a1*a3+a1*a4+a2*a3+a2*a4+a3*a4

这就是输入样例的计算S的公式,我们发现当n小时,我们可以暴力模拟,但是n非常大该怎么办呢?

我们继续往下思考,上面公式中有共同系数,可以提取共同系数得到:

S=a1*(a2+a3+a4)+a2*(a3+a4)+a3*a4

诶呀!!!发现了神奇的东西,我们扩大n

S=a1*(a2+a3+...+an)+a2*(a3+a4+...an)+a3*(a4+a5+...+an)+...+an-1*an

哈哈哈,发现了求区间和,这不是前缀和嘛!破局了!

如果不理解什么是前缀和,请看:基本算法-前缀和 模板+习题-CSDN博客

我简单解释一下:

它的前缀和s[i]等于a[0]-a[i]的和,由此可以得到a[i]+a[i+1]+....+a[j-1]+a[j]=s[j]-s[i-1]

可以写出代码了吧,加上一个for循环就好了。

完整代码

#include<bits/stdc++.h>
using namespace std;

const int N=2e5+10;
long long a[N],s[N];

int main(){
  long long n,m=0;
  cin>>n;
  for(int i=1;i<=n;i++) scanf("%d",&a[i]),s[i]=s[i-1]+a[i];
  for(int i=1;i<n;i++){
    m+=a[i]*(s[n]-s[i]);
  }
  cout<<m<<endl;
  return 0;
}

二、模拟习题

习题-[蓝桥杯 2022 省 B] 刷题统计

题目链接

P8780 [蓝桥杯 2022 省 B] 刷题统计 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述

题目讲解

本题题意很好理解,但题目我感觉难在代码!

还是简单说一下题目吧,周一到周五做a题,周六到周日做b题,最后计算出在第几天做题数目大于等于n。

这里说一下我代码卡在那里了,ceil函数是向上取整,当数据量过大时,直接加上ceil会结果出现错误!!!我就是这里卡到了(莫名其妙多了2,百思不得其解),以为思路错了(其实并没有),大概原因应该是数据过大,直接计算会出错。还有一个小点!!!注意了!int型或long long型数据类型,直接向下取整,作用类似与floor。呃呃呃,还有一个小点,用ceil时,里面除数要乘上一个小数(1.00),要不然它几乎没什么作用,不会向上取整。

完整代码

#include<bits/stdc++.h>
using namespace std;

int main(){
  long long a,b,n,c,d,num,week,t;
  cin>>a>>b>>n;
  c=a*5+b*2;
  week=n/c;
  num=n%c;
  if(num<=5*a){
    d=ceil(num*1.00/a);
    t=(week*7)+d;
    cout<<t<<endl;
  }
  else{
    num-=(a*5);
    d=ceil(num*1.00/b);
    t=week*7+5+d;
    cout<<t<<endl;
  }
  return 0;
}

总结

结束了!!!是不是还有点意犹未尽?

没有嘛?!行吧,记住了,打算法比赛要先心中有基本算法知识,在多去刷题!这就叫有的放矢!

哈哈哈,其实我也比较菜,大家一起努力吧,3月4号蓝桥省赛!

看完了?给作者一个赞和收藏,嘿嘿,要不顺手点个关注?感谢友友们交流,以及欢迎友友们评论!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不想敲代码的小趴菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值