CH P5501 环路运输

本文介绍了一种使用单调队列解决特定环形结构中寻找最优配对的问题,通过将环形结构转化为链式结构并利用单调队列达到线性时间复杂度O(n),适用于算法竞赛及相似问题求解。

目录:


题目:

传送门


分析:

这道题可以发现是一个环,那么把环断成链,复制一份
同时可以发现如果 ij i , j 是最优解,那么 jin÷2(j>i) j − i ≤ n ÷ 2 ( j > i )
所以可以用单调队列解决问题。时间复杂度 O(n) O ( n )


代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>  
#include<cstdlib>
#include<algorithm>
#include<set>
#include<queue>
#include<vector>
#include<map>
#include<list>
#include<ctime>
#include<iomanip>
#include<string>
#include<bitset>
#define LL long long
#define h happy
using namespace std;
inline LL read() {
    LL d=0,f=1;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
    while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
    return d*f;
}
int min(int x,int y)
{ return x<y? x:y; }
int max(int x,int y)
{ return x>y? x:y; }
int x[2000001];
deque<int> q;
int main()
{
    int n=read();
    for(int i=1;i<=n;i++) x[i]=x[i+n]=read();
    int ans=0;
    for(int i=1;i<n*2;i++)
    {
        while(q.size()&&i-q.front()>n/2) q.pop_front();
        if(q.size()) ans=max(ans,x[i]+x[q.front()]+i-q.front());
        while(q.size()&&x[i]-i>x[q.back()]-q.back()) q.pop_back();
        q.push_back(i);
    }
    printf("%d",ans);
    return 0;
}
### CH334P IT相关错误代码或技术定义 CH334P 是一种常见的 USB 控制器芯片,主要用于实现 USB 通信功能。以下是对该芯片相关的 IT 内容、错误代码以及技术定义的详细说明: #### 1. 技术定义 CH334P 是一种支持 USB 全速设备控制器的芯片,能够实现单片机与 PC 之间的数据通信[^4]。它通常用于嵌入式系统中,提供 USB 接口以简化硬件设计和软件开发流程。CH334P 支持多种通信协议,并且可以通过 SPI 或 UART 接口与主控 MCU 进行交互。 #### 2. 错误代码 在使用 CH334P 的过程中,可能会遇到一些错误代码或状态标志。以下是常见错误代码及其含义: - **0x01**: 表示设备未正确连接到主机。 - **0x02**: 表示 USB 数据包传输超时。 - **0x03**: 表示 USB 端点配置失败。 - **0x04**: 表示数据校验错误。 - **0x05**: 表示设备复位失败。 - **0x06**: 表示内存分配错误。 这些错误代码可以在 CH334P 的固件或驱动程序中捕获,并通过调试工具进行分析[^5]。 #### 3. 示例代码 以下是一个简单的初始化和数据传输的代码示例,展示了如何通过 SPI 接口与 CH334P 进行通信: ```c #include "ch334p.h" void CH334P_Init(void) { // 初始化 SPI 接口 SPI_Init(); // 复位 CH334P CH334P_Reset(); } void CH334P_Reset(void) { // 发送复位命令 xWriteCH334Cmd(0x01); delay_ms(100); // 等待复位完成 } uint8_t CH334P_ReadData(void) { return xReadCH334Data(); // 读取 CH334P 数据 } void CH334P_WriteData(uint8_t data) { xWriteCH334Data(data); // 向 CH334P 写入数据 } ``` #### 4. C++ 版本问题 如果在使用 CH334P 的过程中遇到编译错误,可能是由于 C++ 版本不兼容导致的。可以参考以下方法解决: 将 CMakeLists.txt 文件中的编译选项设置为 C++14 标准: ```cmake set(CMAKE_CXX_FLAGS "-std=c++14 -O2 ${SSE_FLAGS} -msse4") ``` 这可以有效避免因 C++11 不支持某些特性而引发的编译错误[^2]。 #### 5. 常见问题排查 - 如果设备无法正常工作,请检查硬件连接是否正确,特别是 USB 接口和 SPI 接口的引脚定义。 - 如果出现数据传输错误,可以尝试降低 SPI 时钟频率以提高稳定性。 - 如果遇到未知错误(如 0xFA),需要检查硬件是否有损坏或者固件版本是否过旧[^3]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值