蓝桥杯备考day4

news2024/11/29 8:34:28

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; // 更新右边界为mid
        else
        	l = mid; // 否则更新左边界为mid
    }
    if (check(l)) // 如果满足条件
    	return l; // 返回左边界值
    else if (check(r)) // 如果满足条件
    	return r; // 返回右边界值
    else
    return -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; // 输入查询次数k
        while(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 和进制 base
        while (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和进制base
        cin >> 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.coloradmin.cn/o/1586667.html

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

相关文章

[目标检测] OCR: 文字检测、文字识别、text spotter

概述 OCR技术存在两个步骤&#xff1a;文字检测和文字识别&#xff0c;而end-to-end完成这两个步骤的方法就是text spotter。 文字检测数据集摘要 daaset语言体量特色MTWI中英文20k源于网络图像&#xff0c;主要由合成图像&#xff0c;产品描述&#xff0c;网络广告(淘宝)MS…

AcWing-直方图中最大的矩形

131. 直方图中最大的矩形 - AcWing题库 所需知识&#xff1a;单调栈 思路&#xff1a;要求最大矩形&#xff0c;所以需要使矩形的高与长的乘积最大即可&#xff0c;依次从左到右将每一列当作中心列&#xff0c;向两边扩散&#xff0c;直到两边的高都小于该列的高&#xff0c;…

Prj文件的几种制作方式

0.序&#xff1a; 多数平面坐标的设计成果&#xff0c;不论是CAD文件&#xff0c;还是BIM模型&#xff0c;还是投影单独存储的tif影像&#xff0c;还是国土部门申请的平面坐标的文本文件&#xff0c;要想和底图叠加&#xff0c;都需要通过正确的投影匹配起来。 多数软件都提供…

解决源 “MySQL 8.0 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。

源 “MySQL 8.0 Community Server” 的 GPG 密钥已安装&#xff0c;但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。 失败的软件包是&#xff1a;mysql-community-server-8.0.31-1.el7.x86_64 GPG 密钥配置为&#xff1a;file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql…

8. 托盘图标与菜单

内容概要&#xff1a; 托盘图标的设置与事件 右键菜单的相关操作 窗口组件&#xff1a; 1.组件的属性 组件属性&#xff1a;位置 组件属性&#xff1a;可视 2.组件的事件 窗口_托盘事件-带有参数的事件的使用方法 3.组件的方法 置托盘图标 菜单的操作 1.创建菜单 …

模型训练----apex库报错IndexError: tuple index out of range

问题描述 在训练模型的过程中遇到了apex库的报错IndexError: tuple index out of range导致无法训练。在github查询后找到了解决方法 问题解决 需要修改/apex-master/apex/amp/utils.py这个文件的代码 从93行开始修改 if x in cache:cached_x cache[x]next_functions_ava…

nvm更新node版本

1、nvm安装和管理多个 Node.js 版本&#xff1a;NVM 允许用户在计算机上同时安装多个不同版本的 Node.js。这使得开发人员可以轻松地在不同的项目中使用不同的 Node.js 版本&#xff0c;而无需手动安装或卸载。 2、nvm切换 Node.js 版本&#xff1a;通过 NVM&#xff0c;用户可…

软考122-上午题-【软件工程】-需求分析

一、软件需求 在进行需求获取之前&#xff0c;首先要明确需要获取什么&#xff0c;也就是需求包含哪些内容。 软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。通常&#xff0c;这些需求包括功能需求、性能需求、用户或人的因素、环境需求、界面需…

深入探索力扣第12题:整数转罗马数字的算法之旅

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 欢迎加入社区&#xff1a;码上找工作http://t.csdnimg.cn/Q59WX作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打…

国家统计局行政区划获取及入库ES实践

我们先看下最终效果&#xff1a; 1. ES索引新建 PUT administrative_division {"mappings": {"properties": {"province": {"type": "keyword"},"province_code": {"type": "keyword"},&q…

Factory Method 工厂方法

意图 定义一个用户创建对象的接口&#xff0c;让子类决定实例化哪一个类&#xff0c;Factory Method使一个类的实例化延迟到其子类 结构 其中 Product定义工厂方法做创建的对象的接口。ConcreteProduct实现Product接口Creator声明工厂方法&#xff0c;该方法返回一个Product…

海外软文通稿代发 - 大舍传媒

引言 在当今高度信息化的时代&#xff0c;企业和个人品牌形象的塑造与传播变得越来越重要。为了在国际舞台上获得更大的竞争优势&#xff0c;许多企业和品牌纷纷将视线投向了国外市场。而在这个过程中&#xff0c;专业的软文通稿代发服务成为了他们的得力助手。本文将向您介绍…

milvus各组件的结构体分析

milvus各组件的结构体分析 各组件启动&#xff0c;需要构建各组件的结构体&#xff0c;一共8个。 runComponent(ctx, localMsg, wg, components.NewRootCoord, metrics.RegisterRootCoord) runComponent(ctx, localMsg, wg, components.NewProxy, metrics.RegisterProxy) run…

HTTPS证书是什么?申请方法是什么?

HTTPS证书是互联网上由权威证书颁发机构&#xff08;CA&#xff09;签发的数字文件&#xff0c;用于证明网站的身份&#xff0c;并通过其中包含的公钥为网站启用HTTPS加密连接&#xff0c;确保用户与网站间的通信数据安全且不可被第三方窃取或篡改。 怎么申请&#xff1f; 一&…

什么是云原生

什么是云原生 云原生的定义 aws&#xff1a; 云原生是在云计算环境中构建、部署和管理现代应用程序的软件方法。现代公司希望构建高度可伸缩、灵活和有弹性的应用程序&#xff0c;以便能够快速更新以满足客户需求。为此&#xff0c;他们使用了支持云基础设施上应用程序开发的现…

【低成本-点云采集】使用XRFoundation实现点云采集

使用XR Foundation 现基于XR Foundation的接口实现渲染和采集 关键类 ARPointCloudManager 介绍 ARPointCloudManager&#xff1a;ARTrackedObjects的管理器。使用XRDepthSubsystem来识别和跟踪物理环境中的深度数据。 属性 NameDescriptiongameObjectNameThe name to b…

接口自动化入门: Requests请求头设置详解!

在进行接口自动化测试时&#xff0c;设置请求头是非常重要的一步。请求头可以包含各种信息&#xff0c;例如身份验证、内容类型、接受语言等。在实际的测试中&#xff0c;我们使用Python的Requests库来发送HTTP请求&#xff0c;并设置请求头来模拟不同的场景和需求。 下面将通…

【炒股Zero To Hero】MACD金叉死叉到底是否有效,加上这个指标回报率增加197倍

移动平均收敛散度&#xff08;MACD - Moving Average Convergence Divergence&#xff09;是一种趋势跟踪动量指标&#xff0c;显示了证券价格的两个移动平均之间的关系。它用于识别趋势的方向和强度&#xff0c;属于技术分析中振荡器的一类。 MACD如何衡量股票及其趋势 有两…

一天300收入打底,​一个适合任何人的创业项目!

共享旅游卡项目&#xff0c;一天300收入打底&#xff0c;一个适合任何人的创业项目&#xff01; 只要你不懒&#xff0c;生活总过得不会太差。只要你不贪&#xff0c;就算不能大富大贵&#xff0c;至少不会负债累累。 人性最难戒掉的两个字&#xff1a;一个是懒&#xff0c;另…

五、书架开发--1.书架标题组件交互、获取书架数据

添加书架页面&#xff0c;做路由配置 首先添加书架页面&#xff0c;到views中的store中添加一个StoreShelf表示书架 然后到路由中进行注册 然后书城首页的返回键我们是想要点击返回的话就跳转到书架页面&#xff0c;所以如下this.$router.push(/store/shelf) 做书架标题组件 …