【codeforces 2070c】二分答案详解
【codeforces 2070c】二分答案详解
二分答案转化成判定
对于任何问题,如果我们有了一个判定算法,那把解空间枚举并判定一遍,当然就可以得到解了。而当解空间具有单调性时,我们就可以使用二分法代替枚举。
考虑如下问题:
有 n n n本数排成一行,已知第 i i i本的厚度是 a i a_i ai。把它们分成连续的 m m m组,使 T T T最小化,其中 T T T是厚度之和最大的一组的厚度。
考虑性质:是否存在一种划分方案,使得 T ≤ x T \leq x T≤x 。也就是说,是否存在一种连续划分 m m m组的方式,使得每组厚度都小于等于 x x x。若 f ( x ) = t r u e f(x) = true f(x)=true,则 f ( x + 1 ) = t r u e f(x + 1) = true f(x+1)=true。满足单调性,可以二分。
请大家体会这里的性质为什么是 ≤ x \leq x ≤x,而不是等于 x x x。只要这样,当 f ( x ) = t r u e f(x) = true f(x)=true时,可以推得 f ( x + 1 ) = t r u e f(x + 1) = true f(x+1)=true;因为小于等于 x x x成立,小于等于 x + 1 x + 1 x+1必然成立。
Problem - C - Codeforces
给定 n n n个单元格组成的长条,初始时所有单元格都是红色。每次操作,都可以选择一段连续的单元格并将其涂成蓝色。对于每个单元格,给出所有操作后指定的颜色:红色或蓝色。现规定只能进行 k k k次操作。显然,不可能总是在 k k k次操作中完成满足所有要求。因此,每个单元格都有一个惩罚值。如果单元格在所有操作后的颜色是错误的,惩罚值就会生效。定义最终的惩罚值是是所有单元格生效的惩罚值中最大的。若没有生效的,则为 0 0 0。问最小的最终惩罚值是多少?
考虑二分答案。性质:是否存在一种合法的涂色方案,使得惩罚值小于等于 x x x?将该性质记为 f ( x ) f(x) f(x)
若存在一种合法的涂色方案使得惩罚值小于等于 x x x,就存在一种合法的涂色方案使得惩罚值小于等于 x + 1 x + 1 x+1。即,若 f ( x ) = t r u e f(x) = true f(x)=true则 f ( x + 1 ) = t r u e f(x + 1) = true f(x+1)=true。该性质单调,可以二分。
该性质可以理解为:如果一个单元格的惩罚值小于等于 x x x,我们无需关心该单元格的颜色是否正确。如果一个单元格的惩罚值大于 x x x,我们就必须将该单元格涂成正确的颜色,否则,惩罚值将会被该惩罚值更新。按以上策略考虑,操作次数为 r e s res res。最终检验 r e s ≤ k res \leq k res≤k
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
#define endl "\n"#define x first
#define y second
#define int LLconst int N = 3e5 + 10;
string str;
int n, k, a[N];void solve() {cin >> n >> k >> str;str = " " + str;for (int i = 1; i <= n; i ++) cin >> a[i];int l = 0, r = *max_element(a + 1, a + n + 1);auto check = [&](int mid) -> bool {vector<pair<int, int>> op;for (int i = 1; i <= n; i ++) {if (a[i] <= mid);else {if (str[i] == 'R') op.push_back({i, 0});else op.push_back({i, 1});}}int res = 0, i = 0, last = -1;while (1) {if (op[i].y == 1) {if (last == -1) last = op[i].x;i ++;}else if (op[i].y == 0) {if (last == -1);else res += 1;last = -1;i ++;}if (i >= op.size()) {if (last != -1) res ++;break;}}return res <= k;};while (l < r) {int mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}cout << r << endl;
}signed main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int t; cin >> t;while (t --) solve();return 0;
}
102. 最佳牛围栏 - AcWing题库
给定正整数数列 a a a,求一个平均数最大的,长度不小于 L L L的连续字段
考虑性质:是否存在一种合法的方案(长度不小于 L L L),使得平均值大于等于 x x x
若 f ( x ) = t r u e f(x) = true f(x)=true,则 f ( x ′ ) = t r u e , x ′ ≤ x f(x') = true, \ x' \leq x f(x′)=true, x′≤x;若 f ( x ) = f a l s e f(x) = false f(x)=false,则 f ( x ′ ) = f a l s e , x ′ ≥ x f(x') = false, \ x' \geq x f(x′)=false, x′≥x
可以二分。
若将 a a a中所有数减去平均数 x x x,则判断是否存在合法字段和非负。
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
#define endl "\n"const int N = 1e5 + 10;
int n, m;
double a[N], t[N];bool check(double mid) {t[0] = 0;for (int i = 1; i <= n; i ++) {t[i] = a[i] - mid;}for (int i = 1; i <= n; i ++) {t[i] += t[i - 1];}double minv = 1e18;for (int i = 0, j = m; j <= n; j ++, i ++) {minv = min(minv, t[i]);if (t[j] - minv >= 0) return true;}return false;
}int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin >> n >> m;for (int i = 1; i <= n; i ++) cin >> a[i];double l = 0, r = 1e18;while (r - l > 1e-5) {double mid = (l + r) / 2;if (check(mid)) l = mid;else r = mid;}cout << (int)(r * 1000) << endl;return 0;
}
相关文章:
【codeforces 2070c】二分答案详解
【codeforces 2070c】二分答案详解 二分答案转化成判定 对于任何问题,如果我们有了一个判定算法,那把解空间枚举并判定一遍,当然就可以得到解了。而当解空间具有单调性时,我们就可以使用二分法代替枚举。 考虑如下问题…...
启发式算法-禁忌搜索算法
禁忌搜索是一种可以用于解决组合优化问题的启发式算法,通过引入记忆机制跳出局部最优,避免重复搜索。该算法从一个初始解开始,通过邻域搜索策略来寻找当前解的邻域解,并在邻域解中选择一个最优解作为下一次迭代的当前解࿰…...
simulink 外循环与内循环执行流程
目录 前言 一、外循环 模型 执行流程 二、内循环 模型 执行流程 仓库 前言 某些需求需要使用到simulink外循环和内循环,本篇通过对其执行顺序进行记录,以便后续查阅。 一、外循环 模型 下面是我搭建的简单模型 执行流程 0-step:执行en step…...
Gradio全解20——Streaming:流式传输的多媒体应用(6)——构建视频流目标检测系统
Gradio全解20——Streaming:流式传输的多媒体应用(6)——构建视频流目标检测系统 本篇摘要20. Streaming:流式传输的多媒体应用20.6 RT-DETR模型构建视频流目标检测系统20.6.1 RT-DETR模型1. 模型介绍2. 使用示例 20.6.2 系统配置…...
比较两种判断相同二叉树的方法:递归与遍历序列对比
在二叉树操作中,判断两棵树是否相同是一个常见的问题。本文将对比两种不同的解决方案:递归法和遍历序列对比法,分析它们的优缺点,并探讨为何递归法是更优的选择。 问题描述 给定两棵二叉树的根节点 p 和 q,判断它们是…...
Java IO流核心处理方式详解
一、IO流概述 Java IO(Input/Output)流是处理输入输出操作的核心机制,通过流(Stream)的形式实现设备间的数据传输。所有操作都基于以下两个核心抽象: InputStream/OutputStream:字节流基类 Re…...
C++竞赛指南
关注支持,好运连连 目录 关注支持,好运连连 一、竞赛C核心优势 二、必备语法与STL组件 1. 输入输出优化 2. 常用STL容器 3. 算法函数 三、竞赛常用算法 1. 时间复杂度分析 2. 高频算法模板 二分查找 快速幂(模运算) …...
Python字符串全面指南:从基础到高级操作
字符串是Python编程中最基础也是最重要的数据类型之一。本文将全面介绍Python字符串的相关知识,从基础概念到高级操作,帮助您彻底掌握字符串的使用。 1. 字符串基础 1.1 字符串的概念 字符串是由一系列字符组成的不可变序列容器,存储的是字…...
【推荐】智慧矿山矿业信息化智能化资料汇总-共25份
智慧矿山矿业信息化智能化资料汇总 25 份: 有色金属矿山智能化采选生产线智能矿山建设与示范智能矿山建设实践与思考智慧矿山建设解决方案与实现途径以信息化、智能化为手段打造生态型、效益型国际一流示范矿山新型智能 X 荧光多通道高精度在线品位分析仪的研制与应…...
Oracle OCP认证考试考点详解083系列08
题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 36. 第36题: 题目 解析及答案: 关于数据库闪回(FLASHBACK DATABASE)功能,以下…...
备战蓝桥杯国赛第一天-atcoder-beginner-contest404
B. 因为只有四种情况,旋转90/180/270度后替换,直接替换,暴力即可 C. 循环图的定义是每个点出度为2,而且只有一个环的,所以先判断出度,再判断是否成环 #include <bits/stdc.h> using namespace st…...
Python异步编程进阶:深入探索asyncio高级特性
异步上下文管理器 (async with) 异步上下文管理器允许你在异步环境中管理资源,比如数据库连接或文件操作。 基本实现 class AsyncDatabaseConnection:async def __aenter__(self):print("建立数据库连接")await asyncio.sleep(0.5) # 模拟连接建立return selfas…...
【Java ee初阶】多线程(7)
一、线程池 线程池的一些参数: corePoolSize:核心线程数量 maximumPoolSize:核心线程数量临时线程数量 上述是“java 的线程池策略”(其他语言,其他库的线程池可能不同) keepAliveTime :临时线程的存活时间.临时线程…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】6.2 预测分析基础(线性回归/逻辑回归实现)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL数据分析实战:预测分析基础(线性回归/逻辑回归实现)6.2 预测分析基础——线性回归与逻辑回归实现6.2.1 预测分析核心理论框架1…...
【NLP】29. 高效训练与替代模型:让语言模型更轻、更快、更强
高效训练与替代模型:让语言模型更轻、更快、更强 本文介绍语言模型如何通过结构优化与新模型探索,提升训练和推理的效率,适应资源受限环境,同时概述了一些 Transformer 替代模型的最新进展。 一、如何让语言模型更高效?…...
【LaTeX+VSCode本地Win11编译教程】
LaTeXVSCode本地编译教程参考视频: LaTeXVSCode本地编译教程 下面提供一种Win11的Latex环境配置和设置方案,首先vscode安装参考博客:【VscodeGit教程】,然后准备安装Latex相关组件 在 https://miktex.org/download 下载 miktex 并…...
组合两个表 --- MySQL [Leetcode 题目详解]
目录 题目链接 往期相关基础内容讲解博客 题目详解 1. 题目内容 2. 解题思路 3. 代码编写 题目链接 // 175. 组合两个表 往期相关基础内容讲解博客 // 聚合查询和联合查询博客 题目详解 1. 题目内容 // 编写解决方案,报告 Person 表中每个人的姓、名、城市…...
STM32 PulseSensor心跳传感器驱动代码
STM32CubeMX中准备工作: 1、设置AD 通道 2、设置一个定时器中断,间隔时间2ms,我这里采用的是定时器7 3、代码优化01 PulseSensor.c文件 #include "main.h" #include "PulseSensor/PulseSensor.h"/******************…...
macOS 上是否有类似 WinRAR 的压缩软件?
对于习惯使用 Windows 的用户来说,WinRAR 是经典的压缩/解压工具,但 macOS 系统原生并不支持 RAR 格式的解压,更无法直接使用 WinRAR。不过,macOS 平台上有许多功能相似甚至更强大的替代工具,以下是一些推荐࿱…...
Java求职面试:Spring Boot与微服务的幽默探讨
Java求职者面试:技术与幽默的碰撞 场景概述 在某互联网大厂的面试现场,面试官严肃认真,程序员则是一个搞笑的水货角色。面试者名叫张伟,年龄28岁,硕士学历,拥有5年的Java开发经验。以下是面试的详细过程。…...
《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》封面颜色空间一图的选图历程
禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 学图像处理的都知道,彩色图像的颜色空间很多,而且又是三维,不同的角度有不同的视觉效果,MATLAB的图又有有box和没有box。…...
Docker 使用下 (二)
Docker 使用下 (二) 文章目录 Docker 使用下 (二)前言一、初识Docker1.1 、Docker概述1.2 、Docker的历史1.3 、Docker解决了什么问题1.4 、Docker 的优点1.5 、Docker的架构图 二、镜像三、容器四、数据卷4.1、数据卷的概念4.2 、…...
【群晖NAS】Docker + WebStation + DDNS 部署无端口号HTTPs WordPress
前言 群晖提供官方的DDNS服务,可以直接配置一个类似于xxxx.synology.me的DDNS解析IPv4/IPv6到自己的NAS;群晖还有Web Station应用可以配置Docker的端口号映射,但是他自己占用了80端口,如果给自己的应用手动指定其他端口号&#x…...
手机SIM卡打电话时识别对方按下的DTMF按键(二)
手机SIM卡打电话时识别对方按下的DTMF按键(二) --本地AI电话机器人 前言 书接上篇,在上一篇章《手机打电话时如何识别对方按下的DTMF按键的字符》中,我们从理论的角度来论述了DTMF的频率组成。并尝试使用400Kb左右的【TarsosDS…...
N-Gram 模型
N-Gram 模型 什么是N-Gram?为什么叫 N-Gram?N-Gram怎么知道下一个词可能是什么?N-Gram 能做什么?N-Gram的问题 本文回答了四个问题: 一、N-Gram是什么?二、N-Gram为什么叫N-Gram?三、N-Gram具体…...
【漫话机器学习系列】240.真正类率(True Positive Rate,TPR)
理解真正类率(True Positive Rate,TPR):公式、意义与应用 在机器学习与深度学习模型评估中,"真正类率"(True Positive Rate,简称TPR)是一个非常重要的指标。TPR反映了分类…...
ThreadLocal源码深度剖析:内存管理与哈希机制
ThreadLocal是Java并发编程中的重要工具,它为每个线程提供独立的变量存储空间,实现了线程之间的数据隔离。本文将从源码实现角度,深入分析ThreadLocal的内部机制,特别是强弱引用关系、内存泄漏问题、ThreadLocalMap的扩容机制以及…...
Softmax回归与单层感知机对比
(1) 输出形式 Softmax回归 输出是一个概率分布,通过Softmax函数将线性得分转换为概率: 其中 KK 是类别数,模型同时计算所有类别的概率。 单层感知机 输出是二分类的硬决策(如0/1或1): 无概率解释&#x…...
数字社会学家唐兴通谈数字行动主义网络行动主义与标签行动主义,理解它才算抓住AI社会学与网络社会学关键所在
让我们继续探讨一个在数字时代至关重要的概念——数字行动主义(Digital Activism)、网络行动主义(Cyberactivism)以及标签行动主义(Hashtag Activism)。我将尽力从一个数字社会学家的角度,抽丝剥…...
PandasAI:对话式数据分析新时代
PandasAI:对话式数据分析新时代 引言项目概述分析基本信息 核心功能详解1. 自然语言查询处理2. 数据可视化生成3. 多数据源集成分析4. 安全沙箱执行5. 云平台协作功能 安装和使用教程1.环境要求2.安装步骤3.基本使用方法4.切换其他LLM 应用场景和实际价值1.适用业务…...
全球化电商平台AWS云架构设计
业务需求: 支撑全球三大区域(北美/欧洲/亚洲)用户访问,延迟<100ms处理每秒50,000订单的峰值流量混合云架构整合本地ERP系统全年可用性99.99%满足GDPR和PCI DSS合规要求 以下是一个体现AWS专家能力的全球化电商平台架构设计方…...
Linux 怎么使用局域网内电脑的网络访问外部
一次性 export http_proxy"http://192.168.0.188:7890" export https_proxy"http://192.168.0.188:7890"一直生效 写入 ~/.bashrc(或 ~/.bash_profile) nano ~/.bashrc加入这一行: export http_proxy"http://19…...
Python-numpy中ndarray对象创建,数据类型,基本属性
numpy库 numpy中的数据结构ndarrayndarray中的dtypendarray中的dtype的指定方式创建ndarray及指定dtype从列表创建ndarray使用 np.empty(), np.zeros(), np.ones() 和 np.full() 创建特定值的数组使用 np.arange() 创建等差数列数组使用 np.linspace() 创建等差数组使用np.logs…...
Python从入门到高手8.2节-元组的常用操作符
目录 8.2.1 元组的常用操作符 8.2.2 []操作符: 索引访问元组 8.2.3 [:]操作符:元组的切片 8.2.4 操作符:元组的加法 8.2.5 *操作符:元组的乘法 8.2.6 元组的关系运算 8.2.7 in操作符:查找元素 8.2.8 五一她玩了个狗吃…...
Python内置函数
Python作为一门简洁强大的编程语言,提供了丰富的内置函数(Built-in Functions),这些函数无需导入任何模块即可直接使用。本文将介绍Python中最常用、最重要的内置函数,帮助初学者快速掌握这些强大的工具。 官方地址&a…...
一款基于 .NET 开源的多功能的 B 站视频下载工具
前言 哔哩哔哩(B站)是一个知名的视频学习平台,作为程序员而言这是一个非常值得推荐的网站。今天大姚给大家推荐一款基于 .NET 开源的多功能的 B 站视频下载工具:downkyi。 项目介绍 downkyi(哔哩下载姬)…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.2 数据分组与透视(CUBE/ROLLUP/GROUPING SETS)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 5.2 数据分组与透视:CUBE/ROLLUP/GROUPING SETS深度解析5.2.1 数据准备与分析目标数据集与表结构分析目标 5.2.2 ROLLUP:层级化分组汇总功能与语法示…...
20、数据可视化:魔镜报表——React 19 图表集成
一、魔镜的预言本质 "数据可视化是霍格沃茨的预言水晶球,将混沌的数据星尘转化为可解读的命运轨迹!" 魔法部占卜司官员挥舞魔杖,Echarts与Three.js的图表矩阵在空中交织成动态星图。 ——基于《国际魔法联合会》第9号可视化协议&a…...
笔记本电脑升级计划(2017———2025)
ThinkPad T470 (2017) vs ThinkBook 16 (2025) 完整性能对比报告 一、核心硬件性能对比 1. CPU性能对比(i5-7200U vs Ultra9-285H) 参数i5-7200U (2017)Ultra9-285H (2025)提升百分比核心架构2核4线程 (Skylake)16核16线程 (6P8E2LPE)700%核心数制程工…...
Flutter——数据库Drift开发详细教程(四)
目录 参考正文表达式1.比较2.布尔代数3.算术BigIn 4.空值检查6.日期和时间7.IN和NOT IN8.聚合函数(例如 count 和 sum)8.1比较8.2算术8.4计数8.5group_concat8.9窗口函数 9.数学函数和正则表达式10.子查询10.1 标量子查询10.2 isInQuery10.3 存在10.4完整…...
android-ndk开发(6): 查看反汇编
android-ndk开发(6): 查看反汇编 2025/05/05 1. 概要 android-ndk 是基于 clang 的工具链, clang 则保持了和 gcc 的高度兼容。 在 Linux 开发机上, GCC 套件里的 objdump 提供了反汇编的功能。 实际上 android-ndk 也提供了一份 objdump,…...
浅析AI大模型为何需要向量数据库?【入门基础】
文章目录 引言:大模型时代的存储挑战一、向量数据库:大模型的"海马体"1.1 什么是向量数据库?1.2 为什么大模型离不开向量数据库?(1) 嵌入(Embedding)的本质(2) 突破上下文窗口限制 二、相似性度量:欧氏距离与…...
Java面试:微服务与大数据场景下的技术挑战
面试对话场景 第一轮:基础知识考察 面试官:谢先生,您能简单介绍一下Java SE 8的新特性吗? 谢飞机:当然,Java SE 8引入了Lambda表达式、Stream API和新的日期时间API,大大简化了代码编写。 面…...
[前端]异步请求的竞态问题
竞态条件简介 遇到的问题 切换标签请求数据,但又快速切换标签请求数据,展示的是前一个标签的数据, 需要在切换标签时添加取消请求的机制,使用AbortController来取消正在进行的请求。当用户快速切换标签时,取消之前的请…...
【PDF拆分+提取内容改名】批量拆分PDF提取拆分后的每个PDF物流面单数据改名或导出表格,基于WPF的PDF物流面单批量处理方案
应用场景 物流行业每天需要处理大量包含物流面单的PDF文件,这些文件通常包含运单号、收发货人信息、货物详情等重要数据。传统手动处理方式效率低下且容易出错。本方案通过WPF实现一个自动化工具,能够: 批量拆分多页PDF为单页文件提取每页面单中的关键信息(如运单号、收件人…...
adb无线调试步骤
环境: macOS; 换成 linux 或 windows 也支持的小米15 Pro; 换成其他 android 手机也支持的 电脑和手机接入相同Wifi在电脑上,确保安装了 adb 对于 Android 开发者, 一般是是通过 Android Studio 安装对于 ndk 开发者…...
RocketMQ与Kafka的区别
文章目录 相同之处不同之处存储形式性能对比传输系统调用存储可靠性单机支持的队列数延时消息消息重复消息过滤消息失败重试死信队列 DLQ回溯消息分布式事务服务发现开发语言友好性开源社区活跃度商业支持成熟度 总结Kafka 和 RocketMQ 怎么选? 本文参考:…...
剥开 MP4 的 千层 “数字洋葱”:从外到内拆解通用媒体容器的核心
在当今数字化时代,MP4 格式随处可见,无论是在线视频、手机拍摄的短片,还是从各种渠道获取的音频视频文件,MP4 都占据着主流地位。它就像一个万能的 “数字媒体集装箱”,高效地整合和传输着各种视听内容。接下来&#x…...
设计模式(结构型)-组合模式
定义 组合模式的定义为:将对象组合成树形结构以表示 “部分 - 整体” 的层次结构,并且使得用户对单个对象和组合对象的使用具有一致性。其最关键的实现要点在于,简单对象和复合对象必须实现相同的接口,这一特性正是组合模式能够对…...
使用 IDEA + Maven 搭建传统 Spring MVC + Thymeleaf 项目的详细步骤
使用 IDEA Maven 搭建传统 Spring MVC Thymeleaf 项目 环境准备步骤 1:创建 Maven 项目步骤 2:添加依赖(pom.xml)步骤 3:配置 web.xml步骤 4:Spring 配置类(Java Config)步骤 5&am…...