做题记录3

news/2025/9/26 0:28:15/文章来源:https://www.cnblogs.com/dbywsc/p/19112365

CF2149E. Hidden Knowledge of the Ancients

思路

滑动窗口 + 双指针。

先不考虑长度的限制,求"恰好有 \(k\) 个不同的数"的区间。可以维护两个窗口,一个是以当前的位置为右端点,且第一个最多有 \(k\) 个不同元素 的区间;一个是以当前位置为右端点,且第一个 最多有 \(k - 1\) 个不同元素 的区间。那么以当前位置为右端点,且恰好有 \(k\) 个不同元素的子区间的数量就为 最多 \(k - 1\) 个 - 最多 \(k\)。其实就是它们的左端点相减的结果。再加上长度限制,要满足

\[l \leq (右端点 - 左端点 + 1) \leq r \Rightarrow 右 - r + 1 \leq 左 \leq 右 - l + 1 \]

所以对于当前的右端点,合法的左端点的数量就为 \(\min(最多 k - 1 个的左端点, c - l + 1) - \max(最多 k 个的右端点, c - r + 1)\)

由于 \(a\) 的范围很大,所以要先离散化。

代码

void solve(void) {int n, k, l, r;std::cin >> n >> k >> l >> r;std::vector<int> a(n);for(int i = 0; i < n; i++) std::cin >> a[i];auto tmp = a;std::sort(tmp.begin(), tmp.end());tmp.erase(std::unique(tmp.begin(), tmp.end()), tmp.end());for(auto &i : a) {i = std::lower_bound(tmp.begin(), tmp.end(), i) - tmp.begin();}int len  = tmp.size();i64 ans = 0;std::vector<int> K(len), K1(len);int disk = 0, disk1 = 0;int lk = 0, lk1 = 0;for(int i = 0; i < n; i++) {K[a[i]]++;if(K[a[i]] == 1) {disk++;}while(disk > k) {int x = a[lk++];K[x]--;if(K[x] == 0) {disk--;}}K1[a[i]]++;if(K1[a[i]] == 1) {disk1++;}while(disk1 > k - 1) {int x = a[lk1++];K1[x]--;if(K1[x] == 0) {disk1--;}}int L = std::max(lk, i - r + 1);int R = std::min(lk1 - 1, i - l + 1);if(R >= L) ans += R - L + 1;}std::cout << ans << '\n';
}

CF2149F. Nezuko in the Clearing

思路

二分。

首先注意到,无论如何都是要走 \(d\) 个回合的,但是在这期间可能会休息若干次。因此可以表示为将 \(d\) 个回合分割为了 \(n\) 段,每段连续走 \(k_i\) 个回合,然后停下来休息一次,最后的答案就应该是:

\[d + (n - 1) \]

在这期间,血量的总消耗是:

\[\sum_{i = 1}^{n}\frac{k_i(k_i + 1)}{2} - (n - 1) \]

要保证消耗 \(\leq h - 1\) ,这样才能保证每一次触发的时候都有 \(\geq 1\) 的血量。

显然我们需要枚举分段的数量,如何 check 呢?

观察函数 \(f(k) = \frac{k(k + 1)}{2}\) ,我们想要让 \(\sum_{i = 1}^{n} f(k_i)\) 最小,注意到应该让每一段的长度都尽可能的接近,也就是说我们会分成若干段 \(\lfloor \frac{d}{n} \rfloor\) ,还有一段 \(d \mod n\) ,然后就可以判断了。

但是如何证明这个结论呢?我不会

代码

void solve(void) {i64 h, d;std::cin >> h >> d;if(h == 1) {std::cout << d * 2 << '\n';return;}i64 l = 1, r = d, len = -1;auto check = [&](i64 x) -> bool {i64 q = d / x;i64 r = d % x;i64 sum = r * (q + 1) * (q + 2) / 2;i64 sum1 = (x - r) * q * (q + 1) / 2;i64 total = sum + sum1 - (x - 1);return total <= h - 1;};while(l <= r) {i64 mid = (l + r) / 2;if(check(mid)) {r = mid - 1;len = mid;} else l = mid + 1;}//std::cout << len << '\n';std::cout << (len - 1) + d << '\n';
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917723.shtml

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

相关文章

网站建设咨询有客诚信wordpress手机全部显示

在Shiro中我们可以通过org.apache.shiro.session.mgt.eis.SessionDAO对象的getActiveSessions()方法方便的获取到当前所有有效的Session对象。通过这些Session对象&#xff0c;我们可以实现一些比较有趣的功能&#xff0c;比如查看当前系统的在线人数&#xff0c;查看这些在线用…

寻求网站建设技术怀柔网站建设优化seo

根据Github Trendings的统计,今日(2024-03-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目2Python项目2非开发语言项目2HTML项目1CSS项目1Dart项目1TypeScript项目1Go项目1JavaScript项目1《Hello 算法》:动画图解、一键运行的…

oucaiclub_cheapter1

Part1 代码练习 螺旋分类实验过程 初始准备生成样本线性模型分类神经网络分类反思总结 问题与解决 首次尝试中,在进行神经网络分类时,损失和准确率的结果与线性模型基本一样,没有明显改善。检查错误后,发现在设置优…

2025年9月训练记录

2025年9月训练记录2025/9/26 abc416_f 题意:树上选\(k\)条不相交的链,使得其贡献和最大. 可以考虑树形\(dp\). 考虑状态的设计如下:设\(dp_{u,i,0/1/2}\)表示当前选了以\(u\)为根的子树,且当前子树的根节点的状态为…

20250925 之所思 - 人生如梦

20250925 之所思9月23日,秋分,我最喜欢的节气;在南方,“桦加沙”很快就要在广东沿海登陆...收到了这两年来对自己最重要的邮件,被任命为中国区部门的软件discipline经理。非常感慨,十多年的奋斗不止,终于在这一…

在CodeBolcks下wxSmith的C++编程教程——在屏幕上绘图和保存绘图

0.前言欢迎来到 wxSmith 教程页面!wxSmith 与 Code::Blocks、wxWidgets 和 C++ 编译器相结合,为您提供一种所见即所得的方式来创建具有图形用户界面 (GUI) 的应用程序。该组合形成了一个用于快速应用程序开发 (RA…

怎么用网站做chm中国电子政务网站建设意见

概述 在实际开发过程中&#xff0c;我们经常需要调用对方提供的接口或测试自己写的接口是否合适。 很多项目都会封装规定好本身项目的接口规范&#xff0c;所以大多数需要去调用对方提供的接口或第三方接口&#xff08;短信、天气等&#xff09;。 在Java项目中调用第三方接口…

苍穹外卖-day07(缓存菜品,缓存套餐,添加购物车,查看购物车,清空购物车) - a

苍穹外卖-day07(缓存菜品,缓存套餐,添加购物车,查看购物车,清空购物车) 课程内容缓存菜品 缓存套餐 添加购物车 查看购物车 清空购物车功能实现:缓存商品、购物车 效果图:1. 缓存菜品 1.1 问题说明 用户端小程…

一次CPU飙升问题排查定位

操作流程CPU飙升问题定位:定位高CPU进程 进程内高CPU线程 top -Hp [PID] jstack [PID] grep -A 20 [十六进制TID]抓取线程栈/arthas工具attach进程后profiler生成火焰图 2.排查常见原因 代码逻辑问题:死循环、递归爆…

ros2 control 2

controller 创建一个pkg,在pkg中新建一个controller.yaml。点击查看代码 controller_manager:ros__parameters:update_rate: 50joint_state_broadcaster:type: joint_state_broadcaster/JointStateBroadcasterdiff_dr…

基于洞察的智能编程法——从直觉到代码的原型炼成术

本文基于分析心理学的知识,介绍一种针对 Ni 主导人格设计的高效 AI 编程工具使用方式,旨在将 Ni 主导者对系统演化路径的深层洞察转化为可规模化、可验证、高效落地的技术产出。基于洞察的智能编程法——从直觉到代码…

lc1036-逃离大迷宫

难度:困难题目描述原题示例 输入:blocked = [[0,1],[1,0]], source = [0,0], target = [0,2] 输出:false输入:blocked = [], source = [0,0], target = [999999,999999] 输出:true题解思路:bfs golang 写得不好,…

做后期哪个网站素材好博纳网络科技有限公司

函数是将具有独立功能的代码块组成一个整体&#xff0c;使其具有特殊功能的代码集。它将复杂的算法过程分解为若干个小任务&#xff0c;隐藏相关细节&#xff0c;使得程序结构更加清晰&#xff0c;易于维护。通过接收输入参数完成一段算法指令&#xff0c;输出或存储相关结果。…

防城港网站seo免费申请网站 主机 空间

软件架构之计算机网络 第 4 章 计算机网络4.1 网络架构与协议4.1.1 网络互联模型4.1.2 常见的网络协议4.1.3 IPv6 4.2 局域网与广域网4.2.2 无线局域网4.2.3 广域网技术4.2.4 网络接入技术 4.3 网络互连与常用设备4.4 网络工程4.4.1 网络规划4.4.2 网络设计4.4.3 网络实施 4.5 …

9.25学习笔记

环境速览( 节点 新装组件 端口 备注 node1 Hive3.1.3 + MySQL 8.0 + Spark3.5.0 3306/10000/8080 HiveServer2 WebUI node2 Spark HistoryServer 18080 日志持久化到 HDFS node3 Kafka 3.7.0 + ZooKeeper(复用) 9092 …

新学期每日总结(第4天)

相较昨日复习了Java知识

wordpress 邮箱 通知成都网站优化哪家好

多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测 目录 多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.M…

外贸长尾关键词挖掘网站关键词排名点击软件网站

目录 前言 1、文件目录 2、安装依赖 3、POM项目实战-案例&#xff1a;打开指定页面 目录结构&#xff1a; pages中的代码&#xff1a; cases中的代码&#xff1a; 4、解决登录问题 问题&#xff1a; 解决方案&#xff1a; 获取登录的用户信息&#xff08;cookie&a…

网站怎么做边框网页版微信会留下记录吗

【判断题】在竞争激烈的市场环境中,职业生的就业优势是证书【简答题】请把今天的语文作业拍照、语音上传,谢谢!【简答题】请把今天的语文作业拍照上传,今日古诗语音上传,谢谢!【简答题】请把今天的作业拍照、语音上传,谢谢!【判断题】职业纵向发展只体现在技术和职务提升。【判…

VSCode 升级 C++支持版本

下载最新版本mingw:https://github.com/niXman/mingw-builds-binaries/releases 解压,覆盖原mingw路径 修改vscode c++插件配置 执行gcc -v -E -x c++ - 添加 starts here后的路径到系统include path中 指定C/C++版本…