D. Dog Walking(枚举,贪心)

施耐德 Modicon M580 ePAC 项目实战:从硬件选型到 Control Expert V15 组态 本文详细解析了施耐德 Modicon M580 ePAC 在工业自动化项目中的实战应用,从硬件选型到 Control Expert V15 组态的全流程。重点介绍了水处理站控制系统的硬件配置、网络架构设计、软件安装授权及程序框架开发,帮助工程师高效实施中大型控制系统项目。 阅读详情

D. Dog Walking

[Link](Problem - D - Codeforces)

题意

​ 你一开始在 0 0 0,给你一个数组 a a a和 k k k, a i a_i ai​表示你从所在地往左或右走多少,若 a i = 0 a_i=0 ai​=0你可以指定这个位置是 [ − k , k ] [-k,k] [−k,k]中的一个数,问你最后走回 0 0 0的条件下最多走多少个不同的点。

思路

  • 枚举,贪心

​ 是否成立在于我们是否能用有的 0 0 0将最终位置挪回到 0 0 0点,对于第 i i i个 0 0 0影响的只有 i i i后面的点。

​ 最多走多少个不同的点等价于求通过最优操作后整个行进路线最左端 L L L和最右端 R R R的距离加 1 1 1。但是由于 0 0 0的位置不确定我们很难直接确定怎么操作是最优的,最终是哪两个点是 L L L和 R R R,因此考虑暴力枚举任意两个点,将这两个点之间的长度最长化,由于最终答案一定是最优化后的两个点之间的长度,因此我枚举的答案一定能包含我们的最优解。

​ 对于每个 0 0 0我们可以加 [ − k , k ] [-k,k] [−k,k],对于我们最长化这个两点之间区间是不方便的,因此考虑将所有的 0 0 0变成 − k -k −k,这样等价于我们可以给每个 0 0 0加 [ 0 , 2 × k ] [0,2\times k] [0,2×k]之间的数了,这样就是单调的了,方便讨论,设 s i : 是 a i 的 前 缀 和 即 当 前 在 哪 个 位 置 s_i:是a_i的前缀和即当前在哪个位置 si​:是ai​的前缀和即当前在哪个位置, c n t i : 表 前 i 个 数 里 有 多 少 个 1 cnt_i:表前i个数里有多少个1 cnti​:表前i个数里有多少个1,则对于任意一个点对 ( i , j ) (i,j) (i,j)分情况来看:

  • s i ≤ s j s_i \le s_j si​≤sj​,由于想让长度尽量长,因此希望两点之间的 0 0 0尽量变成大的数,假设最多可以移动 v = ( c n t j − c n t i − 1 ) × 2 k v=(cnt_j-cnt_{i-1})\times2 k v=(cntj​−cnti−1​)×2k,由于转化以后的问题所有操作只能为正的,因此最终 s n < 0 s_n<0 sn​<0,所以我们最多移动 R = − s n R=-s_n R=−sn​,多了就没法移回来了,最少移动 L = − s n − ( c n t j − c n t i − 1 ) × 2 k L=-s_n-(cnt_j-cnt_{i-1})\times 2k L=−sn​−(cntj​−cnti−1​)×2k,表示除这个区间外是否能将 s n s_n sn​抵消,不行就要这个区间内抵消一部分,则我们的最优长度就是 s j − s i − 1 + 1 + m a x ( R , m i n ( L , v ) ) s_j-s_{i-1}+1+max(R,min(L,v)) sj​−si−1​+1+max(R,min(L,v))
  • s i ≥ s j s_i\ge s_j si​≥sj​,表示在图上就是 j < − i j<-i j<−i,如果我们在区间内进行操作就会让 j j j去向右迫近 i i i因此我们要尽量少的进行操作,因此最优长度就是 s j − s i − 1 + 1 − m i n ( L , 0 ) s_j-s_{i-1}+1-min(L,0) sj​−si−1​+1−min(L,0)

暴力枚举每一个点对,取最大即可

Code

#include <bits/stdc++.h>
#define x first
#define y second
#define debug(x) cout<<#x<<":"<<x<<endl;
using namespace std;
typedef long double ld;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef unsigned long long ULL;
const int N = 1e5 + 10, M = 2 * N, INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-8, pi = acos(-1), inf = 1e20;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int h[N], e[M], ne[M], w[M], idx;
void add(int a, int b, int v = 0) {
    e[idx] = b, w[idx] = v, ne[idx] = h[a], h[a] = idx ++;
}
LL n, m, k;
LL a[N];
int cnt[N];
int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    cin >> n >> k;
   
    for (int i = 1; i <= n; i ++) {
        cin >> a[i];
        if (!a[i]) a[i] = -k, cnt[i] = 1;
        a[i] += a[i - 1];
        cnt[i] += cnt[i - 1];
    }

    k *= 2;
    if (a[n] > 0 || -a[n] > (LL)cnt[n] * k) {
        cout << -1 << '\n';
        return 0;
    }
   
    LL res = 0;
    for (int i = 0; i <= n; i ++)
        for (int j = i; j <= n; j ++) {
            LL l = -a[n] - (cnt[n] - (cnt[j] - cnt[i])) * k,
               r = -a[n]; 
            LL v = (cnt[j] - cnt[i]) * k;
            res = max(res, a[j] - a[i] + 1 + min(r, max(l, v)));
            res = max(res, a[i] - a[j] + 1 - max(0ll, l));
        }
    
    cout << res << '\n';
    return 0;
}
新手必看!手把手教你在群晖 NAS 上玩转 Docker 容器(Container Manager)!(群晖 NAS 如何创建 Docker 容器以及 Compose 部署项目) 阅读详情

相关推荐

xilinx zynq-7000 linux下rs422串口通信测试步骤

这几天使用xilinx的zynq-7000系列调试rs422串口,期间遇到不少问题,好在最终调试完成,在这里记录一下调试步骤。 我用的soc型号是xc7z100,板载了2个rs422外设,PS端有2个uart控制器,uart0用于连接rs232并作为console控制台输出,uart1连接rs422。 rs422和主板连线原理图如下: 其中422_TXD1_3V3 和422_RXD1_3V3 为数据发送和接收引脚,422_TXD_DE1_3V3为发送使能引脚,422_RXD_REn1_...

dongyunke的博客 5907

D. Dog Walking

我们知道在最大值和最小值之外我们进行加减对答案是不影响的,而对于两个极值内部,我们一定会让他尽最大努力向一个方向走,因此我们可以把同一方向的放在一块。 但是我们不知道极值在哪里,只知道结构,所以我们循环整个取值去尝试找到最大值就好了,答案一定是其中之一的情况 /*input 3 100 1 2 -3 */ #include<iostream> #include<algorithm> #include<cstring> using namespace std; .

Hello_wcrd的博客 275

从MIPS汇编到C语言:手把手教你用Mars模拟器理解指令集(附实战代码)

本文详细介绍了如何使用Mars模拟器从MIPS汇编过渡到C语言编程,通过实战代码解析ADD、LW、BEQ等指令集与C语言结构的对应关系。内容涵盖环境搭建、算术运算、内存访问、条件分支及函数调用等核心概念,帮助读者深入理解MIPS指令分类和计算机底层运行机制。

weixin_26821003的博客 359

Codeforces - Dog Show

题目链接:Codeforces - Dog Show 枚举最后一个到的位置,然后我们就知道剩下可以等待的时间。 然后肯定贪心先全部拿来等。 然后用堆或者线段树维护即可。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> #define mid (l+r>>1...

青烟绕指柔的博客 440

深入解析i2cdetect:从基础命令到高级读写操作

本文深入解析Linux下i2cdetect工具,从基础安装、总线扫描到高级读写操作。作为i2c-tools的核心组件,i2cdetect是硬件调试的得力侦探,能快速识别I2C总线上的设备地址。文章还涵盖了i2cdump、i2cset、i2cget等进阶工具,并介绍了如何在C程序中调用读写接口进行嵌入式开发,是掌握I2C通信调试的实用指南。

weixin_29189987的博客 372

WSL 运行make提示/lib/modules/xxx/build: No such file or directory. Stop.错误解决办法

WSL运行make提示/lib//modules/xxx文件或目录不存在。 WSL2的内核是修改过的,无法使用 ubuntu上游的内核头文件和modules文件,因此,我们需要手动编译并安装一个版本。

weixin_45668903的博客 1万+

codeforces D. Walking Between Houses(思维+贪心)

题意:给出n,k,s,初始位置为1,在x坐标轴上可到达的最远位置为n,问恰好走k步能否使得所走距离的和刚好等于s D. Walking Between Houses time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard outpu...

wwwlps的博客 424

如何在windows下使用cmake编译源码

MyProject/└── build/在MyProject目录下创建并编辑。创建build目录并进入。使用cmake命令生成构建文件。使用适当的命令编译项目。运行生成的可执行文件。

cdj444asdg的博客 3346

CF1680D Dog Walking 题解

Description 传送门 Solution Key Observation 对于任意序列 aaa 而言,其前缀最大值与前缀最小值的差,即为 aaa 的各个循环排列的最大前缀和。 例如,对于 a={−4,2,3,3,−4}a=\{-4,2,3,3,-4\}a={−4,2,3,3,−4},其前缀最大值与前缀最小值的差 4−(−4)=84-(-4)=84−(−4)=8 即为其循环排列 {2,3,3,−4,−4}\{2,3,3,-4,-4\}{2,3,3,−4,−4} 的前缀 [1,3][1,3][1,3]

Cherrt的博客 389

手把手教你解锁TI MSPM0G3507开发板(2025新版,附XDS110接线图)

本文详细解析了2025版TI MSPM0G3507开发板的解锁方法,针对新版硬件中BSL引脚的电路设计变化提供了精准接线方案和UniFlash软件配置步骤。通过实测数据和专业指导,帮助开发者解决芯片锁定问题,确保调试接口正常响应。

weixin_42696271的博客 807

PCL 三次均匀B样条曲线拟合

PCL 三次均匀B样条曲线拟合

dayuhaitang1的博客 402

【贪心算法专题】贪心算法入门:从“鼠目寸光”到两道经典例题(柠檬水找零 &将数组和减半的最少操作次数)

贪心策略是一种解决问题的策略:从局部最优推向全局最优。具体执行时可以拆成三步:把解决问题的过程分为若干步;解决每一步的时候,都选择当前看起来"最优"的解法;"希望"最终能得到全局最优解。这里的关键词是"希望"。贪心不像动态规划那样有明确的状态转移保证,它只是做了一个看起来很合理的选择,至于这个选择最终能不能通向全局最优,是需要单独证明的。

2501_93351213的博客 399

AI 辅助编程全景:演进、提效场景与未来趋势

本文系统梳理了AI辅助编程的发展历程与应用场景。演进路径分为三代:从代码补全工具(2023)、对话式助手(2024)到自主编程代理(2025)。在软件全生命周期中,AI可显著提升各环节效率:需求分析阶段节省30-60%文档编写时间;设计阶段缩短40-60%技术调研周期;编码阶段通过智能补全提升55%任务速度;测试阶段减少30-60%测试编写时间。数据显示,2025年84%开发者使用AI工具,41%代码由AI生成,平均每周节省3.6小时。AI正推动开发者角色从编写者转变为审核者,但复杂业务逻辑和架构设计仍需人

甘蓝的专栏 473

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 255

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 324

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

把 KV Cache 压到 FP4:BitDecoding-FP4 的算法-系统协同设计复盘

长上下文推理卡在KV Cache的显存与带宽上,而现有FP4方案要么精度崩、要么速度废。这篇文章复盘BitDecoding-FP4如何用三个算法补丁加一个系统重构,在B300上把服务吞吐提升2.4–3.0倍,精度几乎不掉。

helloagent的博客 302

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 598

优选算法:分治-归并排序

交易逆序对的总数

Wangshijie1015的博客 142

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 23

408 算法 06|堆与 Top-K:最小的 10 个数,到底该用数组还是堆

2022(42) 找 100 万个数里最小的 10 个,官方给了"10 元素有序数组"和"大根堆"两种答案。我把两种都实现并数了比较次数:k=10 时两者几乎打平,k=10000 时堆少 111 倍。另附 2021(42) 计数排序的比较次数与稳定性实测。

m0_56226131的博客 358

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 172

408 算法 04|主元素与三元组最小距离:两种“扫描时做决定“的思路

2013(41) 的主元素用摩尔投票一遍选出候选,但真正的考点是"选完必须验票";2020(41) 的三元组最小距离,三指针每次只挪最小的那个,靠的是 D=2×(max−min) 这个恒等式。两套完整 C 代码加真实输出,附官方评分档位表。

m0_56226131的博客 416

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

a bit 89

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 220

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 180

【前缀和+复合离散化】题解:双色矩形(two)_数据结构_算法优化_预处理_二维前缀和_STL_C++算法竞赛

给定一个 $n \times n$ 的黑白棋盘,初始按 $i+j$ 奇偶染色,经 $k$ 个格子颜色翻转后,求子矩形中黑白格子数差的绝对值最大值。由于 $n$ 可达 $10^9$,但 $k \leq 50$,可离散化关键点。枚举所有由修改点构成的矩形及其四边向外扩展(共 $16$ 种扩展方式),利用二维前缀和快速计算变化量,结合奇偶性判断多出的格子颜色,最终取最大绝对差。时间复杂度为 $O(k^4)$,在 $k \leq 50$ 下可行。

YLCHUP的博客 183
上一篇: Codeforces Round #789 (Div. 2) A~E
下一篇: 异或三角形(数位dp)
枉玊
博客等级 码龄6年 73粉丝 171原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值