蓝桥杯---第二讲---二分与前缀和

文章目录

  • 前言
  • Ⅰ. 数的范围
    • 0x00 算法思路
    • 0x00 代码书写
  • Ⅱ. 数的三次方根
    • 0x00 算法思路
    • 0x01代码书写
  • Ⅲ. 前缀和
    • 0x00 算法思路
    • 0x01 代码书写
  • Ⅳ. 子矩阵的和
    • 0x00 算法思路
    • 0x01 代码书写
  • Ⅴ. 机器人跳跃问题
    • 0x00 算法思路
    • 0x01 代码书写
  • Ⅵ. 四平方和
    • 0x00 算法思路
    • 0x01 代码书写
  • Ⅶ. 分巧克力
    • 0x00 算法思路
    • 0x01 代码书写
  • Ⅷ. 激光炸弹
    • 0x00 算法思路
    • 0x01 代码书写
  • Ⅸ. K倍区间
    • 0x00 算法思路
    • 0x01 代码书写
  • 总结


前言

本篇博客主要打卡记录博主学习蓝桥杯C++AB组辅导课的习题第一章节的题目。


Ⅰ. 数的范围

0x00 算法思路

详细可以看下这一篇博客,详细讲解了二分算法知识
【algorithm】算法基础课—二分查找算法(附笔记 | 建议收藏)

0x00 代码书写

#include <iostream>using namespace std;const int maxn = 100005;
int n, q, x, a[maxn];int main() 
{scanf("%d%d", &n, &q);for (int i = 0; i < n; i++) scanf("%d", &a[i]);while (q--) {scanf("%d", &x);int l = 0, r = n - 1;while (l < r) {int mid = l + r >> 1;if (a[mid] < x)  l = mid + 1;else    r = mid;}if (a[l] != x) {printf("-1 -1\n");continue;}int l1 = l, r1 = n;while (l1 + 1 < r1) {int mid = l1 + r1 >> 1;if (a[mid] <= x)  l1 = mid;else    r1 = mid;}printf("%d %d\n", l, l1);}return 0;
}

Ⅱ. 数的三次方根

0x00 算法思路

1.迭代的思路,就是无脑迭代100次就可.
2.根据题目法写的方法,其实这个就是while(r-l>谁就行啦).

0x01代码书写

#include<iostream>
#include<cstdio>using namespace std;int main()
{double n;scanf("%lf",&n);double l = -100000, r = 100000;while(r - l > 0.00000001){double mid = (l + r) / 2;if(mid * mid * mid >= n) r = mid;else l = mid;}printf("%.6lf",l);return 0;
}

Ⅲ. 前缀和

0x00 算法思路

详细知识看算法基础课笔记 前缀和与差分
【algorithm】认真讲解前缀和与差分 (图文搭配)

0x01 代码书写

#include<iostream>using namespace std;int n,m;
int sum[100010];int main()
{cin>>n>>m;for(int i=1;i<=n;i++){int tmp;cin>>tmp;sum[i]=sum[i-1]+tmp;}while(m--){int l,r;cin>>l>>r;cout<<sum[r]-sum[l-1]<<endl;}return 0;
}

Ⅳ. 子矩阵的和

0x00 算法思路

详细知识看算法基础课笔记 前缀和与差分
【algorithm】认真讲解前缀和与差分 (图文搭配)

0x01 代码书写

#include<iostream>using namespace std;int n,m,q;
int s[1010][1010];int main()
{cin>>n>>m>>q;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cin>>s[i][j];}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];}}while(q--){int x1,y1,x2,y2;cin>>x1>>y1>>x2>>y2;cout<<s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1]<<endl;}return 0;
}

Ⅴ. 机器人跳跃问题

0x00 算法思路

这一道题主要考查了二分答案的算法,通过物理计算得到不论是从低到高,还是从高到低都是:e = 2 * e - h[i] 所以我们假设有一个临界点 E0 满足 0 ~ E0 能量是不满足的,E0 ~ 0x3f3f3f3f 是满足的,就可以使用y总的二分模板了。

0x01 代码书写

#include<bits/stdc++.h>using namespace std;const int N = 100010;int n;
int h[N];bool check(int e)
{for(int i = 1 ; i <= n ; ++ i){e = e * 2 - h[i];if(e >= 1e5) return true;//防止爆intelse if(e < 0) return false;    }return true;
}int main()
{cin >> n;for(int i = 1 ; i <= n ; ++ i) cin >> h[i];int l = 0 , r = 1e5;while(l < r){int mid = l + r >> 1;if(check(mid)) r = mid;else l = mid + 1;}cout << r << endl;return 0;
}

Ⅵ. 四平方和

0x00 算法思路

这一道题我没学具体的算法思路,感觉不如暴力来的实在,确信哈哈哈

0x01 代码书写

#include<iostream>
#include<cmath>using namespace std;int n;
int a,b,c,d;int main()
{scanf("%d",&n);for(int a=0;a*a<=n;a++){for(int b=a;a*a+b*b<=n;b++){for(int c=b;a*a+b*b+c*c<=n;c++){int t=n-a*a-b*b-c*c;int d=sqrt(t);if(d*d==t){printf("%d %d %d %d\n",a,b,c,d);return 0;}}}}return 0;
}

Ⅶ. 分巧克力

0x00 算法思路

这道题主要考查了二分算法,主要是对于一块大巧克力进行分割,思考的到,当分割的块数越多,边长就越短,块数越少,边长就越大,所以肯定可以有一个临界点 mid 可以使得刚好的块数 满足要求 刚好 >= k 块 如果边长 在 Left ~ mid 之间的话 就是边长很大 所以check函数可以判断这个, 如果在 mid ~ Right 之间的话 肯定是都满足要求的。 最后套用y总的算法模板即可

0x01 代码书写

#include<bits/stdc++.h>using namespace std;const int N = 100010;int n,k;
int h[N],w[N];bool check(int mid)
{int res = 0;for(int i = 0 ; i < n ; ++ i){res += (long long)h[i] / mid * (w[i] / mid);if(res >= k) return true;}return false;
}int main()
{cin >> n >> k;for(int i = 0 ; i < n ; ++ i) cin >> h[i] >> w[i];int l = 1 , r = 1e5;while(l < r){int mid = l + r + 1 >> 1;if(check(mid)) l = mid;else r = mid - 1;}cout << r << endl;return 0;
}

Ⅷ. 激光炸弹

0x00 算法思路

贴一个acwing的图片 : 链接 : AcWing 99. 激光炸弹第一题解
在这里插入图片描述
在这里插入图片描述

0x01 代码书写

#include<bits/stdc++.h>using namespace std;const int N = 5010;
int cnt,r;
int s[N][N];
int n,m;int main()
{cin >> cnt >> r;r=min(r,5001);n = m = r;while(cnt --){int x,y,w;cin >> x >> y >> w;x ++;y ++;n = max(x,n);m = max(y,m);s[x][y] += w;}for(int i = 1; i <= n; ++ i)for(int j = 1; j <= m ;++ j)// 构造二维前缀和s[i][j] += s[i-1][j] + s[i][j-1] - s[i-1][j-1];int res = 0;      for(int i = r; i <= n ;++ i){for(int j = r; j <= m ;++ j)//根据二维前缀和进行答案计算{res = max(res, s[i][j]-s[i-r][j]-s[i][j-r]+s[i-r][j-r]);}}cout << res << '\n';return 0;
}

Ⅸ. K倍区间

0x00 算法思路

这一道题我只是用了 前缀和做优化,感觉我考试的时候也想不到y总的算法思路,呜呜呜呜呜…

0x01 代码书写

#include<iostream>using namespace std;int n,k;
int a[100010];
int sum[100010];int main()
{cin>>n>>k;for(int i=1;i<=n;i++) cin>>a[i];int ans=0,i=0;for(i=1;i<=n;i++){sum[i]=sum[i-1]+a[i];}for(int j=1;j<=i;j++){for(int s=j+1;s<=i;s++){if((sum[s]-sum[j])%k==0) // 前缀和优化{ans++;}else continue;}}cout<<ans;return 0;
}

总结

本篇博客主要讲解了前缀和 和 二分算法的知识,前面四道题都是算法基础课 的模板题,后面几道题才是真正考查这两个算法的真实难度,开始我也觉得很难很难,但是认真学习完发现其实还是可以学会的,所以请热爱 请认真学习,总会学好,总会获得不小的进步的,加油吧夏目浅石.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/99058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud学习笔记-注册微服务到Eureka注册中心

目录 1.在该Module的pom文件中引入eureka依赖2.在该module的src/main/resources/application.yml配置文件3.启动对应的微服务4.查看微服务是否启动成功 假如我有一个微服务名字叫user-service,我需要把它注册到Eureka注册中心,则具体步骤如下: 1.在该Module的pom文件中引入eure…

Flink的处理函数——processFunction

目录 一、处理函数概述 二、Process函数分类——8个 &#xff08;1&#xff09;ProcessFunction &#xff08;2&#xff09;KeyedProcessFunction &#xff08;3&#xff09;ProcessWindowFunction &#xff08;4&#xff09;ProcessAllWindowFunction &#xff…

真香!Jenkins 主从模式解决问题So Easy~

01.Jenkins 能干什么 Jenkins 是一个开源软件项目&#xff0c;是基于 Java 开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 中文官网&#xff1a;https://jenkins.io/zh/ 0…

好消息:用 vue3+layui 共同铸造我们新的项目

前言&#xff1a; layui这个框架不知道多少人还在关注着&#xff0c;记得第一次接触它是在18年&#xff0c;后来随着vue&#xff0c;react的盛行&#xff0c;jquerylayui的模式受到了特别大的冲击&#xff0c;后来作者都放弃维护他的官方网站&#xff0c;转而在github/gitee上做…

SLAM从入门到精通(ROS和底盘Stm32的关系)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 学过Ros的同学&#xff0c;一般对subscribe、publish、话题、服务这些内容都比较熟悉。如果再熟悉一点的话&#xff0c;还会知道slam、move_base、…

NLP - 数据预处理 - 文本按句子进行切分

NLP - 数据预处理 - 文本按句子进行切分 文章目录 NLP - 数据预处理 - 文本按句子进行切分一、前言二、环境配置1、安装nltk库2、下载punkt分句器 三、运行程序四、额外补充 一、前言 在学习对数据训练的预处理的时候遇到了一个问题&#xff0c;就是如何将文本按句子切分&#…

ChainForge:衡量Prompt性能和模型稳健性的GUI工具包

ChainForge是一个用于构建评估逻辑来衡量模型选择&#xff0c;提示模板和执行生成过程的GUI工具包。ChainForge可以安装在本地&#xff0c;也可以从chrome浏览器运行。 ChainForge可以通过聊天节点对多个对话可以使用不同的llm并行运行。可以对聊天消息进行模板化&#xff0c;并…

基于复旦微JFM7K325T FPGA的高性能PCIe总线数据预处理载板(100%国产化)

PCIE711是一款基于PCIE总线架构的高性能数据预处理FMC载板&#xff0c;板卡采用复旦微的JFM7K325T FPGA作为实时处理器&#xff0c;实现各个接口之间的互联。该板卡可以实现100%国产化。 板卡具有1个FMC&#xff08;HPC&#xff09;接口&#xff0c;1路PCIe x8主机接口&#x…

【HomeKit】HAT User Manual教程

前言&#xff1a;这篇文章是对于苹果协议文件《HomeKit Accessory Tester (HAT) User Manual》的学习&#xff0c;即 HomeKit配件测试仪(HAT) 用户手册&#xff0c;该版本是第11次修订 第一章 概述 本文档介绍了Apple HomeKit配件测试仪(HAT)的配置和使用方法。HAT是一个Mac应…

Redis作为缓存,mysql的数据如何与redis进行同步?

Redis作为缓存&#xff0c;mysql的数据如何与redis进行同步&#xff1f; 一定要设置前提&#xff0c;先介绍业务背景 延时双删 双写一致性:当修改了数据库的数据也要同时更新缓存的数据&#xff0c;缓存和数据库的数据要保持一致 读操作:缓存命中&#xff0c;直接返回;缓存未…

【Spring Cloud】深入探索统一网关 Gateway 的搭建,断言工厂,过滤器工厂,全局过滤器以及跨域问题

文章目录 前言为什么需要网关以及网关的作用网关的技术实现 一、Gateway 网关的搭建1.1 创建 Gateway 模块1.2 引入依赖1.3 配置网关1.4 验证网关是否搭建成功1.5 微服务结构分析 二、Gateway 断言工厂2.1 Spring 提供的断言工厂2.2 示例&#xff1a;设置断言工厂 三、Gateway …

Spring的事务控制

目录 基于AOP的声明事务控制 Spring事务编程概述 搭建测试环境 基于xml声明式事务控制 详解 事务增强的AOP 平台事务管理器 Spring提供的Advice&#xff08;重点介绍&#xff09; 原理 &#xff08;源码没有翻太明白&#xff09; 基于注解声明式事务控制 基于AOP的声明…

小视频APP源码选择指南:挑选最适合你的开发框架

在如今蓬勃发展的小视频APP行业中&#xff0c;源码的选择是打造一款成功应用的关键步骤。然而&#xff0c;面对众多开发框架的选择&#xff0c;如何挑选最适合你的小视频APP源码呢&#xff1f;作为这一领域的专家&#xff0c;我将为你提供一份详尽的指南&#xff0c;助你在源码…

Windows10打开应用总是会弹出提示窗口的解决方法

用户们在Windows10电脑中打开应用程序&#xff0c;遇到了总是会弹出提示窗口的烦人问题。这样的情况会干扰到用户的正常操作&#xff0c;给用户带来不好的操作体验&#xff0c;接下来小编给大家详细介绍关闭这个提示窗口的方法&#xff0c;让大家可以在Windows10电脑中舒心操作…

智能工厂MES系统,终端设备支持手机、PDA、工业平板、PC

一、开源项目简介 源计划智能工厂MES系统(开源版) 功能包括销售管理&#xff0c;仓库管理&#xff0c;生产管理&#xff0c;质量管理&#xff0c;设备管理&#xff0c;条码追溯&#xff0c;财务管理&#xff0c;系统集成&#xff0c;移动端APP。 二、开源协议 使用GPL-3.0开…

010:连续跌3天,同时这三天收盘价都在20日均线下,第四天上涨的概率--以京泉华为例

对于《连续跌三天&#xff0c;压第四天上涨的盈利计算》&#xff0c;我们可以继续优化这个策略&#xff0c;增加条件&#xff1a;同时三天都收盘在20日均线下。 因为我们上一篇《获取20日均线数据到excel表中》获得了20日均线数据&#xff0c;我们可以利用均线数据来编写新的脚…

基于SpringBooy的安康旅游网站的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 登录模块的实现 景点信息管理界面 酒店信息管理界面 特产管理界面 游客管理界面 景点购票订单管理界面 系统主界面 游客注册界面 景点信息详情界面 酒店详情界面 特产详情界面 三、核心代码 1、登录模块 2、文件上传模块…

c++桥接模式,中介者模式应用实现状态跳转

上图为例&#xff0c;按上述两种方式实现的模式跳转&#xff0c;如果在原先的三种模式之间再增加多一种模式&#xff0c;就会引起每个模式都会要求改变&#xff0c;并且逻辑混乱&#xff0c;因此更改模式为桥接中介者访问&#xff0c;将抽象和实现分离&#xff0c;实现之间采用…

Ultra-Fast-Lane-Detection-v2 {后处理优化}//参考

采用三次多项式拟合生成的anchor特征点&#xff0c;在给定的polyfit_draw函数中&#xff0c;degree参数代表了拟合多项式的度数。 具体来说&#xff0c;当我们使用np.polyfit函数进行数据点的多项式拟合时&#xff0c;我们需要指定一个度数。这个度数决定了多项式的复杂度。例…

JProfiler14.0(Java开发分析)

JProfiler是一款专业的Java应用程序性能分析工具&#xff0c;可帮助开发人员识别和解决Java应用程序中的性能问题。JProfiler支持Java SE、Java EE和Android平台&#xff0c;提供了多种分析选项&#xff0c;包括CPU分析、内存分析和线程分析等。 使用JProfiler&#xff0c;开发…