蓝桥杯备考day4

1.1 二分查找模板

bool check(int x)
{// 进行某些操作
}
// 二分查找函数
int binarySearch()
{int l = 1, r = n; // 初始化左右边界while (r - l > 1) // 当右边界与左边界相差大于1时{int mid = (l + r) >> 1; // 取中间位置if (check(mid)) // 如果满足条件r = mid; // 更新右边界为midelsel = mid; // 否则更新左边界为mid}if (check(l)) // 如果满足条件return l; // 返回左边界值else if (check(r)) // 如果满足条件return r; // 返回右边界值elsereturn -1; // 否则返回-1
}
  • 例题

    题目描述

    小华被大林叫去砍树,他需要砍倒 m 米长的木材。现在,小华弄到了一个奇怪的伐木机。 伐木机工作过程如下:小华设置一个高度参数 h(米),伐木机升起一个巨大的锯片到高度 h, 并锯掉所有的树比 h 高的部分(当然,树木不高于 h 米的部分保持不变)。小华就得到树木被锯下的部分。 例如,如果一行树的高度分别为 20、15、10、15、10 和 17 米,小华把锯片升到 15米的高度,切割后树木剩下的高度将是 15、15、10和 15 米,而小华将从第 1 棵树得到 5 米, 从第 4 棵树得到 2 米,共得到 7 米木材。 小华非常关注生态保护,所以他不会砍掉过多的木材。这正是他为什么要尽可能高地设定伐木机锯片的原因。 现在请你帮助小华找到伐木机锯片的最大的整数高度 h,使得他能得到的木材至少为 m米。换句话说,如果再升高 1 米,则他将得不到 m 米木材。

    输入格式

    第 1 行 2 个整数 n和 m*, n* 表示树木的数量, m 表示需要的木材总长度。
    第 2 行 n个整数,表示每棵树的高度,值均不超过 10的9次方。保证所有木材长度之和大于 m, 因此必然有解。

    输出格式

    一行一个整数,表示砍树的最高高度。

    样例

    输入数据 1

    5 20
    4 42 40 26 46
    

    输出数据 1

    36
    

    说明/提示

    • 对于 30%30% 的数据:1≤n≤10,1≤m≤30。
    • 对于 70%70% 的数据:1≤n≤1e3,1≤m≤1e4。
    • 对于 100%100% 的数据:1≤n≤1e6,1≤m≤2×1e9。
  • 代码

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e6+10;
    ll a[N];
    ll n,m;
    ll maxn=0;int check(ll x){ll res=0;for(int i=1;i<=n;i++)if(a[i]>=x) res+=a[i]-x;return res>=m;}int main(){cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];maxn=max(maxn,a[i]);}ll l=1,r=maxn;while(r-l>1){ll mid=(l+r)/2;if(check(mid)){l=mid;	} else{r=mid;} }if(check(r)) cout<<r;else cout<<l;return 0; 
    }
    

1.2 一维前缀和

在这里插入图片描述

  • 代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10; // 定义常量N,表示数组长度的上限
int sum[N]; // 定义数组sum,用于存储前缀和
int main() {int n, k, x;cin >> n; // 输入数组长度// 计算前缀和for(int i = 1; i <= n; i++) {cin >> x; // 输入数组元素sum[i] = sum[i - 1] + x; // 计算前缀和并存储到数组sum中}cin >> k; // 输入查询次数kwhile(k--) {int l, r;cin >> l >> r; // 输入查询区间[l,r]// 输出区间和,利用前缀和数组sum进行快速计算cout << sum[r] - sum[l - 1] << endl;}return 0;
}

1.3 一维差分

#include<bits/stdc++.h>
using namespace std;
int n,m,a[100005],d[100005],sumd[100005];
int main()
{cin>>n>>m;int l,r,c;for(int i=1;i<=n;i++)//存数据{cin>>a[i];d[i]=a[i]-a[i-1];//记录差分数组}for(int i=1;i<=m;i++)//m次区间操作{cin>>l>>r>>c;d[l]+=c;d[r+1]-=c;}for(int i=1;i<=n;i++)//求最终的前缀和,即修改收后的a{sumd[i]=sumd[i-1]+d[i];cout<<sumd[i]<<" ";}return 0;
}
  • 例题
    在这里插入图片描述

    • 代码
    #include<bits/stdc++.h>
    using namespace std;
    const int N = 1e5 + 10;
    int a[N]; //原数组
    int d[N]; //差分数组
    int s[N]; //原数组(修改后的)
    int main()
    {int n, m;cin >> n >> m;for(int i = 1; i <= n; i++) cin >> a[i];//求差分数组for(int i = 1; i <= n; i++) d[i] = a[i] - a[i-1];//m次修改差分数组for(int i = 1; i <= m; i++){int l, r, x;cin >> l >> r >> x;d[l] += x, d[r + 1] -= x;}//对差分数组求前缀和,得到修改后的原数组for(int i = 1; i <= n; i++){s[i] = s[i - 1] + d[i];cout << s[i] << " ";}return 0;
    }
    

1.4 十进制转K进制 模板

  • 例题

    在这里插入图片描述

  • 代码

    #include <bits/stdc++.h> // 包含标准头文件
    using namespace std;long long s, base; // 定义两个长整型变量,s 为要转换的数,base 为进制
    string p = "0123456789ABCDEF"; // 定义字符串 p,存储 16 进制数的所有可能字符
    string ans; // 定义字符串 ans,用于存储转换后的结果int main() {cin >> s >> base; // 输入要转换的数 s 和进制 basewhile (s) { // 当 s 不为 0 时循环ans.push_back(p[s % base]); // 将 s 对 base 取模的结果作为索引,将对应的字符添加到 ans 末尾s /= base; // 将 s 除以 base,更新 s 的值}reverse(ans.begin(), ans.end()); // 将 ans 反转,因为从末尾开始计算的结果需要反转才能得到正确的结果cout << ans; // 输出转换后的结果return 0; // 返回0,表示程序正常结束
    }

1.5 K进制转十进制 模板

  • 例题

在这里插入图片描述

  • 代码

    #include<bits/stdc++.h>
    using namespace std;
    int main() {string s;long long base = 0, ans = 0, k = 0; // 初始化所有变量// 输入字符串s和进制basecin >> s >> base;// 从字符串末尾开始遍历for(int i = s.size() - 1; i >= 0; i--) {// 如果字符为大写字母if(s[i] >= 'A') {ans += (s[i] - 'A' + 10) * pow(base, k++); // 更新结果} else {ans += (s[i] - '0') * pow(base, k++); // 更新结果}}// 输出结果cout << ans;return 0;
    }
    

1.6 质数判断

#include<cstdio>
bool isprime(int num){if(num==2)return true;if(num%2==0 || num<2)return false;else{for(int i=3;i*i<=num;i+=2){if(num%i==0){return false;}}return true;}
}
int main(){int x;scanf("%d",&x);if(isprime(x)){printf("Yes");}else{printf("No");}return 0;
} 

1.7 最大公因数

  • C++有自带的 __gcd(a,b) 注意这里 gcd 前面 是两个 _ ,而且变量 和 数据类型必须相同,不能 是 int 型, 是 long long 型。

  • 辗转相除法递归求解

    int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);
    }
    

1.8 最小公倍数

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
// 求最大公约数
long long gcd(long long a, long long b) {if (b == 0) {return a;}return gcd(b, a % b);
}
int main() {long long a, b;// 输入两个数cin >> a >> b;// 计算最小公倍数,并输出结果cout << a / gcd(a, b) * b; // 注意这里先乘再除可能会溢出,要先除再乘。return 0;
}

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

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

相关文章

第十一届蓝桥杯大赛第二场省赛试题 CC++ 研究生组-七段码

#include<iostream> using namespace std; const int N 10, M 7; int e[N][N] {0}, f[N], open[N];//e[i][j]表示i和j之间是否连通&#xff1b;f[i]表示结点i的父节点&#xff1b;open[i] 1表示结点i打开&#xff0c;0表示关闭 long long ans 0;int find(int x){if(…

PP-LCNet:一种轻量级CPU卷积神经网络

PP-LCNet: A Lightweight CPU Convolutional Neural Network 最近看了一个新的分享&#xff0c;在图像分类的任务上表现良好&#xff0c;具有很高的实践意义。 论文&#xff1a; https://arxiv.org/pdf/2109.15099.pdf项目&#xff1a; https://github.com/PaddlePaddle/Padd…

AMD Tensile 简介与示例

按照知其然&#xff0c;再知其所以然的认知次序进行 1&#xff0c;下载代码 git clone --recursive https://github.com/ROCm/Tensile.git 2&#xff0c;安装 Tensile cd Tensile mkdir build cd build ../Tensile/bin/Tensile ../Tensile/Configs/rocblas_dgemm_nn_asm_full…

微信小程序(六)定位搜索

一、引言 作者上一章讲了微信小程序的地图实现微信小程序&#xff08;五&#xff09;地图-CSDN博客&#xff0c;但是还有一个功能是和地图紧密结合的&#xff0c;那就是位置搜索定位&#xff0c;这里作者讲讲实现和原理&#xff0c;包括城市筛选。 二、定位搜索实现 1、位置搜…

mysql查看数据库表容量大小

【推荐】单表行数超过 500 万行或者单表容量超过 2GB&#xff0c;才推荐进行分库分表。 说明&#xff1a;如果预计三年后的数据量根本达不到这个级别&#xff0c;请不要在创建表时就分库分表。 1. 查询所有数据库记录数和容量 SELECTtable_schema AS 数据库,SUM(table_rows) …

用vue.js写案例——ToDoList待办事项 (步骤和全码解析)

目录 一.准备工作 二.编写各个组件的页面结构 三.实现初始任务列表的渲染 四.新增任务 五.删除任务 六.展示未完成条数 七.切换状态-筛选数据 八.待办事项&#xff08;全&#xff09;代码 一.准备工作 在开发“ToDoList”案例之前&#xff0c;需要先完成一些准备工作&a…

图像处理与视觉感知---期末复习重点(7)

文章目录 一、图像压缩1.1 三种冗余1.2 模型1.3 信息测量 二、无误差压缩2.1 哈夫曼编码2.1.1 步骤2.1.2 例题 2.2 算术编码 三、变换编码 一、图像压缩 1.1 三种冗余 1. 三种基本的是数据冗余为&#xff1a;编码冗余、像素间冗余、心理视觉冗余。 2. 编码冗余&#xff1a;如果…

蓝桥杯——玩具蛇

题目 小蓝有—条玩具蛇&#xff0c;一共有16节&#xff0c;上面标着数字1至16。每—节都是一个正方形的形状。相邻的两节可以成直线或者成90度角。 小蓝还有一个44的方格盒子&#xff0c;用于存放玩具蛇&#xff0c;盒子的方格上依次标着字母A到Р共16个字母。 小蓝可以折叠自…

浙大恩特客户资源管理系统 i0004_openFileByStream.jsp 任意文件读取漏洞复现

0x01 产品简介 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源,提升销售和市场营销的效果。 0x02 漏洞概述 浙大恩特客户资源管理系统 i0004_openFileByStream.jsp接口处存在任意文件读取漏洞,未经身份验证攻…

快速开始vue3

版本 node (20.11.1)vue3 (3.4.21) 脚手架创建项目并运行 安装脚手架并创建项目 npm create vuelatest这一指令将会安装并执行 create-vue&#xff0c;它是 Vue 官方的项目脚手架工具 2&#xff09; 安装以下进行选择 ## 配置项目名称 √ Project name: vue3_test ## 是否…

网络编程基础

目录 【1】网络编程&#xff1a; ​【2】通信两个重要的要素&#xff1a;IPPORT 【3】设备之间进行传输的时候&#xff0c;必须遵照一定的规则 ---》通信协议&#xff1a; 【4】TCP协议&#xff1a;可靠的 建立连接&#xff1a; 三次握手 ​编辑释放连接&#xff1a;四次挥…

Python生成图片和音频验证码

captcha是pyhton的一个模块&#xff0c;用来生成图片和音频验证码。 安装 pip install captcha使用 from captcha.audio import AudioCaptcha from captcha.image import ImageCaptcha# 加载声音和字体 audio AudioCaptcha(voicedir/path/to/voices) image ImageCaptcha(…

【洛谷 P4017】最大食物链计数 题解(深度优先搜索+动态规划+邻接表+记忆化搜索+剪枝)

最大食物链计数 题目背景 你知道食物链吗&#xff1f;Delia 生物考试的时候&#xff0c;数食物链条数的题目全都错了&#xff0c;因为她总是重复数了几条或漏掉了几条。于是她来就来求助你&#xff0c;然而你也不会啊&#xff01;写一个程序来帮帮她吧。 题目描述 给你一个…

蓝牙耳机哪个品牌质量最好最耐用?五大口碑最佳机型,硬核推荐

​在快节奏的都市生活中&#xff0c;无线蓝牙耳机成为了我们摆脱线缆束缚、随时随地享受音乐的完美伴侣。面对市场上琳琅满目的品牌和型号&#xff0c;挑选一款合适的耳机似乎是一项挑战。因此&#xff0c;我精心挑选了几款性能卓越的蓝牙耳机&#xff0c;希望我的分享能为你提…

Vue学习笔记(一)

1. 绑定事件按按键修饰符 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><title>绑定事件和按键修饰符</title> </head><body> <div id"app">{{ person }}<hr/><…

【Linux】开始了解重定向

送给大家一句话&#xff1a; 人真正的名字是&#xff1a;欲望。所以你得知道&#xff0c;消灭恐惧最有效的办法&#xff0c;就是消灭欲望。 – 史铁生 《我与地坛》 开始了解重定向 1 前言2 重定向与缓冲区2.1 文件描述符分配规则2.2 重定向的现象2.3 重定向的理解2.4 缓冲区…

突破传统RAG限制!Adaptive-RAG实现高效复杂查询处理

参考文章&#xff1a;突破传统RAG限制&#xff01;Adaptive-RAG实现高效复杂查询处理 在人工智能领域&#xff0c;大型语言模型&#xff08;LLMs&#xff09;的发展日新月异&#xff0c;它们在多种任务中展现出了卓越的性能。然而&#xff0c;尽管LLMs在处理问题时表现出色&…

MongoDB数据库转换为表格文件的Python实现

目录 一、引言 二、转换工具与库的选择 三、转换过程详解 安装必要的库 连接MongoDB数据库 查询并处理数据 将数据写入CSV文件 四、进阶技巧与注意事项 五、总结 一、引言 在当今大数据时代&#xff0c;数据的存储、处理与共享显得尤为重要。MongoDB作为一个面向文档…

如何更换网络IP地址,简单几步轻松搞定

在数字化日益普及的今天&#xff0c;网络IP地址作为设备在网络中的标识&#xff0c;扮演着极其重要的角色。有时&#xff0c;出于安全考虑、网络布局调整或解决特定问题的需要&#xff0c;我们可能需要更换网络IP地址。虎观代理将详细介绍如何更换网络IP地址&#xff0c;帮助用…

Android 输入法框架

输入法属于输入系统的一部分&#xff0c;区别于输入系统只能向系统产生时间&#xff0c;输入法能向系统输入具体的内容&#xff0c;下面来认识输入法的大体框架&#xff0c;以下内容参考清华大学出版社出版的《Android图形显示系统》。 输入法框架包含3个组件&#xff0c;各组件…