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

文章目录

  • 前言
  • Ⅰ. 数的范围
    • 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.rhkb.cn/news/149422.html

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

相关文章

超声波气象站——环境监测领域强大助手

超声波气象站是环境监测领域的一位强大助手&#xff0c;超声波气象站是一种综合型的气象设备&#xff0c;精巧而全面&#xff0c;满足人们对环境状况的深入了解和精准把握。 首先&#xff0c;超声波气象站的传感器部分&#xff0c;是它的核心组成部分&#xff0c;这位“感知者”…

【Hello Linux】多路转接之 epoll

本篇博客介绍&#xff1a; 多路转接之epoll 多路转接之epoll 初识epollepoll相关系统调用epoll的工作原理epoll服务器编写成员变量构造函数 循环函数HandlerEvent函数epoll的优缺点 我们学习epoll分为四部分 快速理解部分概念 快速的看一下部分接口讲解epoll的工作原理手写epo…

GB28181学习(六)——实时视音频点播(数据传输部分)

GB28181系列文章&#xff1a; 总述&#xff1a;https://blog.csdn.net/www_dong/article/details/132515446 注册与注销&#xff1a;https://blog.csdn.net/www_dong/article/details/132654525 心跳保活&#xff1a;https://blog.csdn.net/www_dong/article/details/132796…

【SpringCloud】微服务技术栈入门3 - Gateway快速上手

目录 GatewayWebFlux网关基本配置过滤器与断言工厂全局过滤器跨域处理 CORS Gateway WebFlux gateway 基于 webflux 构建 WebFlux 是基于反应式流概念的响应式编程框架&#xff0c;用于构建异步非阻塞的 Web 应用程序。它支持响应式编程范式&#xff0c;并提供了一种响应式的方…

想要精通算法和SQL的成长之路 - 无重复字符的最长子串和滑动窗口最大值

想要精通算法和SQL的成长之路 - 无重复字符的最长子串 前言一. 无重复字符的最长子串二. 滑动窗口最大值2.1 滑动窗口的基本操作 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 无重复字符的最长子串 原题链接 思路如下&#xff1a; 用一个滑动窗口&#xff0c;该窗口区…

SpringBoot自带模板引擎Thymeleaf使用详解①

目录 前言 一、SpringBoot静态资源相关目录 二、变量输出 2.1 在templates目录下创建视图index.html 2.2 创建对应的Controller 2.3 在视图展示model中的值 三、操作字符串和时间 3.1 操作字符串 3.2 操作时间 前言 Thymeleaf是一款用于渲染XML/HTML5内容的模板引擎&am…

数据分析视角中的商业分析学习笔记

数据分析一大堆&#xff0c;结果却是大家早就知道的结论&#xff1f;是工具和方法出问题了吗&#xff1f;真正原因可能是你的思维有误区。 为什么分析的这么辛苦&#xff0c;得出的结论大家早知道&#xff0c;谁谁都不满意&#xff1f;核心原因有3个&#xff1a; 分析之前&am…

DataX和dataX-web 集群部署及使用

&#x1f4d1; DataX和dataX-web 集群部署及使用 一 . 安装前准备 DataX 是一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 DataX 采用 框架 插件 的模式…

SpringBoot vue云办公系统

SpringBoot vue云办公系统 系统功能 云办公系统 登录 员工资料管理: 搜索员工 添加编辑删除员工 导入导出excel 薪资管理: 工资账套管理 添加编辑删除工资账套 员工账套设置 系统管理: 基础信息设置 部门管理 职位管理 职称管理 权限组管理 操作员管理 开发环境和技术 开发语…

网络准入 重定向,DNS劫持内网设备访问网站

环境&#xff1a;Nginx 问题&#xff1a; 1.某网络实施网络准入控制&#xff0c;需要劫持不受信网段的客户端 所有访问到指定引导页面 2.需要劫持PS4 用户访问任意网站&#xff0c;或用户指南 方式全自动破解 解决办法&#xff1a;搭建dnsmasq DNS服务器&#xff0c;全域名解析…

Spring MVC程序开发(JavaEE进阶系列3)

目录 前言&#xff1a; 1.什么是Spring MVC 1.1MVC的定义 1.2MVC和Spring MVC的关系 1.3为什么要学习Spring MVC 2.Spring MVC项目的创建 3.Spring MVC框架的使用 3.1连接的功能 3.1.1RequestMapping 3.1.2GetMapping 3.1.3PostMapping 3.2获取参数的功能 3.2.1获…

Error string: Could not load library

启动Rivz时&#xff0c;报错&#xff1a; Error string: Could not load library (Poco exception libg2o_csparse_extension.so.0.1: cannot open shared object file: No such file or directory) [ERROR] [1696572310.529059051]: Failed to load nodelet [/radar_graph_s…

Dubbo 融合 Nacos 成为注册中心

Nacos 作为 Dubbo 生态系统中重要的注册中心实现&#xff0c;本文将会介绍如何进行 Dubbo 对接 Nacos 注册中心的工作。 预备工作 请确保后台已经启动 Nacos 服务 快速上手 Dubbo 融合 Nacos 成为注册中心的操作步骤非常简单&#xff0c;大致步骤可分为“增加 Maven 依赖”…

【C++设计模式之原型模式:创建型】分析及示例

简介 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许通过复制已有对象来生成新的对象&#xff0c;而无需再次使用构造函数。 描述 原型模式通过复制现有对象来创建新的对象&#xff0c;而无需显式地调用构造函数或暴露对象的创建…

flink处理函数--副输出功能

背景 在flink中&#xff0c;如果你想要访问记录的处理时间或者事件时间&#xff0c;注册定时器&#xff0c;或者是将记录输出到多个输出流中&#xff0c;你都需要处理函数的帮助&#xff0c;本文就来通过一个例子来讲解下副输出 副输出 本文还是基于streaming-with-flink这本…

c#设计模式-行为型模式 之 责任链模式

&#x1f680;简介 又名职责链模式&#xff0c;为了避免请求发送者与多个请求处理者耦合在一起&#xff0c;将所有请求的处理者通过前一对 象记住其下一个对象的引用而连成一条链&#xff1b;当有请求发生时&#xff0c;可将请求沿着这条链传递&#xff0c;直到有对象处理它为…

sigmoid和softmax函数有什么区别

Sigmoid函数和Softmax函数都是常用的激活函数&#xff0c;但它们的主要区别在于应用场景和输出结果的性质。 Sigmoid函数&#xff08;也称为 Logistic函数&#xff09;&#xff1a; Sigmoid函数将输入值映射到0到1之间的连续实数范围&#xff0c;通常用于二元分类问题。 Si…

重置Jetson设备的Ubuntu密码:通过挂载根目录到另一个Linux系统

在本文中&#xff0c;我们将介绍如何在忘记Ubuntu 20.04密码的情况下重置密码。我们将通过将Ubuntu的根目录挂载到另一个Linux系统来实现这一目的。我们还将介绍chroot命令的功能。 1. 背景 最近&#xff0c;我们研发团队遇到了一个棘手的问题。一台用于研发&#xff0c;多人使…

小黑上午参加婚礼,下午去姥姥家帮着看店学习人情世故的leetcode之旅:213. 打家劫舍 II

动态规划 class Solution:def rob(self, nums: List[int]) -> int:# 数组长度n len(nums)if n 1:return nums[0]# 打家劫舍1中的函数def rob1(start, end):if start end:return nums[start]# 动态规划指针first 0second nums[start]third nums[start]# 动态规划操作f…

【C++】:类和对象(2)

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux的基础知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数…