0x05 内容简介与例题习题

STM32F05x移植GD32F1x0注意事项 提要:costdown         前言:本以为能很顺利的移植,结果130这颗芯片虽然是M3的core,实际上外部PIN与GPIO等寄存器结构与M0一致,NVIC部分又与M3一致,简言之,130即有M3的“基因”,也有M0的“基因”,主要这颗芯片是为了与ST的M0芯片抢市场。由于刚上市,所以Library从ST M0的Library基础稍作修改。寄存器名称虽然不一样,但是实际地址与功能是完全 阅读详情

《算法竞赛进阶指南》读书笔记汇总
这里面是我在阅读《算法竞赛进阶指南》这本书时的一些思考,有兴趣可以瞧瞧!
如若发现什么问题,可以通过评论或者私信作者提出。希望各位大佬不吝赐教!

中位数

中位数有许多有趣的性质,我们来通过几道例题感受一下这些性质。

【例题】货仓选址(AcWing104)

题目链接
思路: 因为这个专题是中位数的专题,那么我们可以猜到,这个地址选在所有商店位置的中位数处最优。为什么呢?我们假设最优解不是在中位数处,假设在中位数的左边,如果我们把这个解往右边移动的话,总距离会减小;假设在中位数的右边,如果我们把这个解往左边移动的话,总距离也会减小。那么最优解肯定是在中位数处。
设商店数量为 N N N,第 i i i个商店的位置为 p o s [ i ] pos[i] pos[i],那么如果 N N N是偶数的话,最优解的位置为 p o s [ N / 2 ] pos[ N / 2 ] pos[N/2]到 p o s [ N / 2 + 1 ] pos[N / 2 + 1] pos[N/2+1]之间的任意位置;如果 N N N是奇数的话,最优解的位置为 p o s [ ( N + 1 ) / 2 ] pos[( N + 1 ) / 2] pos[(N+1)/2]。那么无论 N N N是奇数还是偶数,其实最优解的位置可以设置为 p o s [ ( N + 1 ) / 2 ] pos[(N + 1) / 2] pos[(N+1)/2]。

AC代码:

#include<iostream>
#include<algorithm>
#define N 100005
#define LL long long 

using namespace std;

int n;
int a[N];

int main(){
    cin >> n;
    for(int i = 1;i <= n;i ++)
        cin >> a[i];
    sort(a + 1,a + 1 + n);
    
    LL ans = 0;
    for(int i = 1;i <= n;i ++){
        ans += abs(a[(n + 1) / 2] - a[i]);
    }
    cout << ans << endl;

    return 0;
}

【例题】动态中位数(AcWing106)

题目链接
思路: 动态维护中位数是一个经典问题。我们可以使用一个“对顶堆”的在线做法,首先建立一个小顶堆和一个大顶堆,然后依次读入 N N N。在读入过程中,设当前已读序列长度为 M M M,我们只需要保持序列中从小到大排名为 1 1 1~ M / 2 M / 2 M/2的整数存储在大根堆中,保持序列中从小到大排名为 M / 2 + 1 M / 2 + 1 M/2+1~ M M M的整数存储在小根堆中。那么当序列长度为奇数时,小根堆堆顶的整数就是我们需要输出的数。
任何时候,如果某一个堆中的元素过多,就从堆顶拿出放进另一个堆中。

AC代码:

#include<bits/stdc++.h>
#define LL long long
#define N 1005
using namespace std;

int p;
int m;
int id;

void solve(){
    cin >> p;

    for(int i = 1;i <= p;i ++){
        cin >> id >>m;
        priority_queue<int> q1;
        priority_queue<int,vector<int>, greater<int> > q2;
        vector<int> ans;

        for(int j = 1;j <= m;j ++){
            int x;cin>> x;
            if(q2.size() == 0) q2.push(x);
            else if(x > q2.top()) q2.push(x);
            else q1.push(x);

            if(q2.size() > q1.size() && q2.size() - q1.size() >= 2){
                q1.push(q2.top());
                q2.pop();
            }
            else if(q1.size() > q2.size() && q1.size() - q2.size() >= 2){
                q2.push(q1.top());
                q1.pop();
            }
            else if(q1.size() > q2.size() ){
                q2.push(q1.top());
                q1.pop();
            }
            if(j & 1)
                ans.push_back(q2.top());
        }

        cout << id << " " << ans.size() << endl;
        int cnt = 0;
        for(auto x : ans){
            cnt ++;
            if(cnt == 10){
                cout << x << "\n";
                cnt = 0;
            }
            else
                cout << x << " ";
        }
        if(cnt) cout << endl;
    }
}

int main(){
    solve();
    return 0;
}

习题

【练习】糖果传递(AcWing122)

题目链接
思路: 我们令第 i i i个小朋友的糖果数量为 a [ i ] a[i] a[i],令第 i i i个小朋友给第 ( i + 1 ) (i + 1) (i+1)个小朋友的糖果数量为 x i x_{i} xi​(第 n n n个小朋友给第 1 1 1个小朋友),令 b = 1 n ∑ i = 1 n a i b = \frac{1}{n} \sum_{i = 1}^na_{i} b=n1​∑i=1n​ai​,则 x i x_{i} xi​必须满足下列以下等式:
a 1 + x n − x 1 = b a_{1} + x_{n} - x_{1} = b a1​+xn​−x1​=b
a 2 + x 1 − x 2 = b a _{2} + x_{1} - x_{2} = b a2​+x1​−x2​=b
. . . . . . ...... ......
a n + x n − 1 − x n = b a _{n} + x_{n - 1} - x_{n} = b an​+xn−1​−xn​=b
通过以上等式,我们可以把 x i ( 1 ≤ i ≤ n − 1 ) x_{i}(1\le i \le n - 1) xi​(1≤i≤n−1)表示成 x n x_{n} xn​与已知的 a a a数组元素的关系,他们的关系为:
x i = x n − ( i ∗ b − ∑ j = 1 i a i ) , ( 1 ≤ i ≤ n − 1 ) x_{i}=x_{n}-(i * b - \sum_{j = 1}^ia_{i}),(1\le i \le n - 1) xi​=xn​−(i∗b−∑j=1i​ai​),(1≤i≤n−1)
那么我们的最终价值可以表示为:
∑ i = 1 n ∣ x i ∣ = ∑ i = 1 n − 1 ∣ x n − ( i ∗ b − ∑ j = 1 i a i ) ∣ + ∣ x n − 0 ∣ \sum_{i = 1}^n|x_{i}|=\sum_{i = 1}^{n - 1}|x_{n}-(i *b - \sum_{j =1}^ia_{i})| + |x_{n}-0| ∑i=1n​∣xi​∣=∑i=1n−1​∣xn​−(i∗b−∑j=1i​ai​)∣+∣xn​−0∣
那么我们可以发现,这个形式就是找出一个 x n x_{n} xn​,使得所有点与这个 x n x_{n} xn​的总距离最小。我们利用中位数的性质,可以轻易的求出这个 x n x_{n} xn​,即可求出最小价值。

AC代码:

#include<bits/stdc++.h>
#define N 1000005
#define LL long long 

using namespace std;

LL a[N];

int main(){
    int n;
    LL sum = 0;
    
    cin >> n;
    for(int i = 1;i <= n;i ++){
        cin >> a[i];
        sum += a[i];
    }
    
    LL avr = sum / n;
    
    vector<LL> v;
    
    v.push_back(0LL);
    sum = 0;
    for(int i = 1;i < n;i ++){
        sum += a[i];
        v.push_back(i * avr - sum);
    }
    
    sort(v.begin(),v.end());
    
    LL ans = 0;
    for(int i = 0;i < v.size();i ++){
        ans += abs(v[i] - v[v.size() / 2]);//这里不用(v.size() + 1) / 2,是因为数组下标从0开始
    }
    
    cout << ans << endl;
    return 0;
}

【练习】士兵(AcWing123)

题目链接
思路: 首先不难发现两个方向是独立的。对于 y y y方向的话,我们利用中位数可以快速求出。对于 x x x方向的话,首先按照 x x x坐标从小到大排序,那么我们不难证明,最优移动前的相对位置与最优移动后的相对位置是一样的。我们假设最终 x 1 x_{1} x1​移动到了 a a a这个位置,那么 x i ( 2 ≤ i ≤ n ) x_{i}(2\le i \le n) xi​(2≤i≤n)就会移动到 a + i − 1 a+ i - 1 a+i−1位置。那么 x x x方向的总移动步数可以表示为: ∑ i = 1 n ∣ x i − ( a + i − 1 ) ∣ = ∑ i = 1 n ∣ x i − ( i − 1 ) − a ∣ \sum_{i = 1}^n|x_{i} - (a + i - 1)|=\sum_{i =1}^n|x_{i} - (i - 1) -a| ∑i=1n​∣xi​−(a+i−1)∣=∑i=1n​∣xi​−(i−1)−a∣
那么我们又可以利用中位数去算出这样一个 a a a使得总移动步数最小。
首先将 x x x坐标排序,将排完序后的每一个 x i x_{i} xi​减去 i − 1 i - 1 i−1,将处理完的 x x x坐标再排序一遍,利用中位数的性质即可算出答案。

AC代码:

#include<bits/stdc++.h>
#define N 10005
#define LL long long 

using namespace std;

int n;
int x[N],y[N];

void solve(){
    cin >> n;
    vector<int> vx;
    for(int i = 1;i <= n;i ++)
        cin >> x[i] >> y[i];
        
    sort(x + 1,x + 1 + n);
    
    int ans = 0;
    sort(y + 1,y + 1 + n);
    for(int i = 1;i <= n;i ++)
        ans += abs(y[i] - y[(n + 1) / 2]);
        
    for(int i = 1;i <= n;i ++)
        x[i] -= (i - 1);
    
    sort(x + 1,x + 1 + n);
    for(int i = 1;i <= n;i ++)
        ans += abs(x[i] - x[(n + 1) / 2]);
        
    cout << ans << endl;
}

int main(){
    solve();
    return 0;
}

未完成题目

【例题】七夕祭(AcWing105)

BLE开发避坑指南:从0x05到0x3B,手把手教你排查最常见的5个连接错误码 本文详细解析BLE开发中最常见的5个连接错误码(0x05、0x3B、0x08、0x13、0x3A),提供从错误现象到解决方案的完整路径。通过实战案例和代码示例,帮助开发者快速定位和解决身份验证失败、连接参数不匹配、连接超时等问题,提升BLE连接的稳定性和可靠性。 阅读详情

相关推荐

matlab课后答案杨德平,MATLAB基础教程习题答案作者杨德平例题源程序课件.pdf

MATLAB基础教程习题答案作者杨德平例题源程序课件.pdf《MATLAB 基础教程》例题源程序第 2 章【例 2-18】A=[1 2 2 1;2 1 -2 -2;1 -1 -4 -3];format rat %以有理分式显示Z=null(A,'r') %求解空间的有理基础解系通解表示的程序为:syms k1 k2X=k1*Z(:...

weixin_31205191的博客 1870

OBD服务简述5--0x05与0x06服务

OBD之05/06服务

qq_40633122的博客 959

Modbus调试踩坑实录:从0x01到0x0B,手把手教你定位并修复9种常见通信故障

本文详细解析了Modbus通信中从0x01到0x0B的9种常见故障码,包括功能码错误、地址越界、数据边界问题等,并提供了实用的排查方法和修复技巧。通过真实案例和工具推荐,帮助工程师快速定位和解决Modbus通信故障,提升工业自动化系统的稳定性。

weixin_33725126的博客 420

AD9361的0x05E寄存器的说明

AD9361的0x05E寄存器通常用于监测BB-PLL的状态,特别是用于确认BB-PLL是否已经成功锁定。BB-PLL是AD9361初始化配置的起始状态,它设置了晶振的输入类型、参考时钟频率、AD9361内部基带锁相环频率和环路滤波器参数等关键参数。AD9361的0x05E寄存器是一个重要的状态监测寄存器,用于确认BB-PLL是否已成功锁定。在配置AD9361时,需要密切关注该寄存器的状态,并确保BB-PLL成功锁定后再进行后续的配置步骤。

sukihu的博客 822

C# Modbus通信从入门到精通(7)——Modbus RTU(0x05功能码与C#代码实现)

本文详细介绍了ModbusRTU协议中0x05写单个线圈功能码的原理、发送报文、返回报文,由高级工程师多年经验总结而成,绝对干货!

qq_34059233的博客 2557

C# Modbus通信从入门到精通(26)——Modbus TCP(0x05功能码与C#代码实现)

本文详细介绍了ModbusTCP协议中0x05写单个线圈功能码的原理、发送报文、返回报文,由高级工程师多年经验总结而成,绝对干货!

qq_34059233的博客 1925

【UDS诊断】——0x34、0x36、0x37服务

Client端使用Routine Control服务来执行定义的步骤序列并获取特定序列的相关结果。该服务有极大的灵活性。Service31的典型用途可以包括擦除内存、重置定义的数据、覆盖正常服务控制策略以及控制ECU值随时间变化的功能。通过Service31可以启动特定序列、停止运行该特定序列、请求运行结果。该服务以往常用于ECU在做Software Update时,应用于检查刷写条件是否满足、传输数据完整性以及独立性检测。

LOVE135149的博客 6100

C# Modbus通信从入门到精通(17)——Modbus ASCII(0x05功能码与C#代码实现)

本文详细介绍了ModbusASCII协议中0x05写的单个输出线圈功能码的原理、发送报文、返回报文、C#代码实现,由高级工程师多年经验总结而成,绝对干货!

qq_34059233的博客 1029

YOLO X Layout效果对比展示:YOLOX-Tiny vs L0.05 Quantized vs L0.05精度与速度实测

本文介绍了如何在星图GPU平台上自动化部署yolo_x_layout文档理解模型,实现高效的文档布局分析。该模型能够智能识别文档中的文本、表格、图片等11种元素,适用于自动化办公、智能文档处理等场景,显著提升文档数字化和信息提取的效率。

weixin_42173218的博客 899

(25.08)Ubuntu20.04+ROS1复现FAST-LIO2

请确保在。

m0_69023437的博客 3994

VS2019 +osg3.6.5+ earth3.2+qt5.14.2+osgQt 编译教程

用vs新建工程,稍后会在写一篇博客上分享四、结语至此,所有的编译就均已完成。

king_ink的博客 1134

0x05 排序

离散化 void discrete() { sort(a+1, a+n+1); /*for (int i=1; i<=n; ++i) if (i==1|| a[i]!=a[i-1]) b[++m]=a[i]; */ //STL实现 m=unique(a+1, a+n+1)-a-1; } void...

weixin_30539835的博客 170

YOLOV8多模态(可见光+红外光目标检测任务,基于Ultralytics官方代码实现)

torch 2.3.1 torchvision 0.18.1 Python 3.8.19 tensorrt 8.5.3.1DroneVehicle数据集下载地址DroneVehicle 数据集由无人机采集的 56,878 张图像组成,其中一半是 RGB 图像,其余是红外图像。我们为这 5 个类别制作了丰富的注释,其中包含定向边界框。其中,汽车在 RGB 图像中有 389,779 个注释,在

Mjy的博客 7585

应用回归分析(何晓群)CH2、CH3例题、习题

应用回归分析(何晓群)CH2、CH3例题、习题第2章: 一元线性回归习题2.14习题2.15习题2.16第3章: 多元线性回归习题3.11 第2章: 一元线性回归 习题2.14 习题2.15 习题2.16 第3章: 多元线性回归 习题3.11 ...

weixin_44878159的博客 8891

企业知识库AI助手的权限管理架构:如何实现细粒度控制?

在展开架构设计前,我们需要先明确“细粒度权限”的核心定义,并理解它对AI助手的特殊意义。权限管理的“粒度”,本质是权限控制的精准程度。维度粗粒度权限细粒度权限资源范围entire document(整个文档)field/paragraph(字段/段落)操作类型read/write(读/写)generate_summary/download/export(生成摘要/下载/导出)上下文约束无(静态权限)time/ip/device(时间/IP/设备)适用场景简单系统(如内部wiki)

大数据洞察的博客 1042

LeRobot 入门教程(十三)集成自定义的机器人、相机等硬件

本文详细介绍了如何将自定义机器人集成到LeRobot生态系统的完整流程。主要内容包括:1)硬件准备与通信接口选择;2)继承Robot基类实现标准接口;3)定义观察特征和动作特征;4)处理设备连接/断开逻辑;5)支持校准与配置;6)实现核心传感器读取和动作发送功能;7)可选遥操作器集成;8)遵循4项规范打包自定义设备(命名前缀、类名对应、文件结构、模块暴露);9)提供了完整实现示例。通过该方案,开发者可让自定义机器人兼容LeRobot的数据采集、控制管道和策略训练等全套工具链。

2506_90492529的博客 1902

linux串口对0X0D、0X0A等特殊字符的处理

摘要:项目中使用STM32与RK3588串口通信传输温湿度数据时,出现CRC8校验失败问题。经排查发现,Linux端会将特殊字符(如0x0D、0x0A等)自动转换,导致接收数据被篡改,CRC校验值错误。解决方案是在Linux串口初始化时清除输入阶段的自动处理标志(IGNBRK、ICRNL等),使数据以原始形式接收。修改后,系统能正确接收特殊字符,CRC校验恢复正常。该问题表面偶现实为必现,关键在于禁用串口的自动转换功能。

沉在嵌入式的鱼的博客 1137

基于深度学习YOLOv8的PCB板缺陷检测系统

基于YOLOv8的PCB板缺陷检测系统,可以有效提高PCB生产过程中的检测效率。未来,我们可以进一步优化模型,结合更多的数据增强策略和先进的网络结构,以适应更复杂的生产环境。为了进行训练,理想的数据集应包含多种不同缺陷类型和不同背景的PCB图像。YOLOv8需要的数据格式为每个图像一个标签文件,每个标签文件包含缺陷的类别及其边界框坐标。运行该界面时,用户可以通过点击按钮选择图像,随后系统将自动检测图像中的PCB缺陷并显示结果。训练完成后,可以使用训练好的模型进行推理,检测新的PCB图像中的缺陷。

YOLO 1070

LeetCodeHot100_0x05

LeetCodeHot100_0x05 【32-38】重点掌握归并排序链表版 + LRU缓存手撕

wzc200406的博客 758

槽型光电开关传感器原理图设计,已量产(光电传感器)

在嵌入式设备的位置限位、物料计数等场景中,槽型光电开关是性价比极高的传感器方案 —— 它通过遮挡发射器与接收器之间的光路实现电平切换,电路简单且抗干扰性优于漫反射式光耦。今天分享一个实际项目中落地的槽型光电开关检测电路,从器件选型到逻辑设计都做了简化适配,适合小批量原型或低成本产品的需求。

不脱发的程序猿 720

手把手教你学Simulink——基础储能管理场景实例:基于Simulink的压缩空气储能(CAES)系统简化模型仿真

本文介绍了基于Simulink的压缩空气储能(CAES)系统简化模型仿真方法。CAES作为大规模长时储能方案,相比锂电池具有成本低、寿命长等优势。文章详细讲解了AA-CAES系统组成、热力学建模理论,以及Simulink实现流程,包括储气室、压缩机、膨胀机等核心模块的建模方法。通过8小时充电(50MW)和6小时放电(40MW)的仿真,验证了系统可实现60%往返效率。该模型为理解CAES系统运行机制提供了实用工具,并指出热管理、储气室特性等工程实践要点,为新型电力系统储能规划提供了仿真基础。

MHD0815的博客 171

如何解决TranslucentTB安装失败0x80073D05错误:完整指南

TranslucentTB是一款广受欢迎的Windows任务栏透明化工具,它能让你的Windows 10和Windows 11任务栏变得半透明或完全透明,带来优雅的视觉体验。然而,许多用户在重新安装或更新这款工具时,常常会遇到令人头疼的0x80073D05错误代码。这篇文章将为你全面解析这个问题的根源,并提供从简单到专业的多种解决方案。 ## 🔍 问题诊断:为什么会出现0x80073D05错误

gitblog_00283的博客 388

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Windows 0x80190001错误解决

解决Windows 0x80190001错误 本人系统版本为win10 2004 windows出现这样的错误,初步判断为windows的网络连接问题引起的,一般这个错误会导致用户账户无法登陆、windows商店无法显示内容、个人账户无法同步或验证等相关问题。下面我们来看看具体的修复方法。 修复 1、使用windows的搜索功能(或直接使用快捷键win+s),输入cmd,会出现命令行提示符,右键选择管理员身份运行;..................

Imagine Miracle的博客 18万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数据结构05:树与二叉树 习题01[C++]

考研笔记整理,本篇作为树与二叉树的基本概念习题,供小伙伴们参考~🥝🥝

weixin_42789937的博客 1502

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C语言习题05_数学

C语言习题05_数学 习题05(01)最大公约数 题目描述 输入两个正整数 m 和 n,求其最大公约数和最小公倍数。 输入描述 输入为整型 输出描述 输出为整型(输出里的冒号为中文冒号) 输入样例 12,15 输出样例 最大公约数为:3 最小公倍数为:60 #include <stdio.h> int main() { int m, n, x, y, r; scanf("%d,%d", &m, &n); x = m; y = n; r =

多学习 3816

C语言0XEC与0X1F什么意思,什么是ASN.1 DER标记值0x0a?

30 82 01 8F 30 81 F9 **A0** 03 02 01 02 02 01 01 300D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 30 0D31 0B 30 09 06 03 55 04 03 0C 02 43 41 30 20 170D 31 33 30 39 31 35 31 35 33 35 30 32 5A 18 0F32 31 31...

weixin_39735247的博客 1475
上一篇: 0x04 相关习题
下一篇: 0x06 内容简介与例题习题
juruo_c
博客等级 码龄6年 520粉丝 116原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值