学校月考题解 #2

news/2025/1/9 19:39:32/文章来源:https://www.cnblogs.com/P2441M/p/18662803

一些闲话

期末考,依旧是 AK。

题解

T1

\(n\) 个位置。起初每个位置都被封锁。你可以进行以下两种类型的操作:

  1. 选择一个位置 \(i\),其中 \(1\leq i\leq n\) ,然后解除该位置的封锁;
  2. 选择一对位置 \(l\)\(r\),其中 \(1\leq l\leq r\leq n\),满足位置 \(l\)\(r\) 都已解除封锁,且从位置 \(l\) 到位置 \(r\) 的已解除封锁的位置数至少为 \(\lceil\frac{r - l + 1}{2}\rceil\),然后将 \(l\)\(r\) 之间的所有位置都解除封锁。

要求最终所有位置都被解锁。最小化操作 \(1\) 的次数。
多测。对于所有测试点,\(1\leq t\leq 10^4\)\(1\leq n\leq 10^5\)

贪心简单题。考虑一个极长的已被解锁的区间 \([1,r]\),那么显然可以解锁 \(2(r+1)\) 处的位置,然后选取 \((1,2(r+1))\) 进行操作 \(2\)。暴力模拟即可。时间复杂度 \(O(t\log{n})\)

T2

给定一个数字串 \(s\),你可以进行若干次这样的操作:选取其中一个数字(该数字不为 \(0\) 且不在最左边),将其减小 \(1\),然后与前面的数字交换。试最大化最终的数字串的字典序。
对于所有测试点,\(1\leq|s|\leq 2\times 10^5\)

还是贪心简单题。要最大化字典序,就肯定要从高到低确定并最大化每一位,直接贪心地选取交换到前面最大的那一位即可。注意到对于每一位,决策集合最多包含从当前位开始的 \(9\) 位,暴力找最大值即可。时间复杂度 \(O(\Sigma n)\)

扩展:扩大字符集大小。

那么考虑维护原串中每个位置交换到前面得到的数字 \(v_i\)。那么每一次查询全局 \(\max\) 即可。而选定一个最大的位置 \(i\) 后,显然它后面所有位置的交换次数都会减 \(1\),等价于将 \(v[i+1,n]\) 区间加 \(1\),然后再令 \(v_i\leftarrow -\infty\) 即可。于是直接上线段树,就可以做到与字符集大小无关的 \(O(n\log{n})\) 的时间复杂度。

T3

定义一个长度为 \(n\) 的排列 \(p\) 的价值其中所有区间的最小值之和,即

\[\sum_{l=1}^n\sum_{r=l}^n\min_{k=l}^r\{p_k\} \]

多次询问 \(n,k\),求出在所有令价值最大化的长度为 \(n\) 的排列中,字典序第 \(k\) 小的排列。
对于所有测试点,\(1\leq q\leq 10^4\)\(1\leq n,\sum{n}\leq 2\times 10^5\)\(1\leq k\leq 10^{12}\)

先思考令价值最大化的排列具有怎样的性质。对这个式子显然考虑拆贡献,即计算每个 \(p_i\) 延伸出去的极长的以它为最小值的区间。自然地从小到大考虑每个数,对于 \(1\),这个区间长度必然为 \(n\);对于 \(2\),这个区间长度至多达到 \(n-1\),且此时显然要求 \(1\) 在排列的两端……以此类推。于是这个性质就很显然了:从小到大考虑每个数,将它从最左端从左到右地加到排列中,或将它从最右端从右到左地加到排列中。这样构造出来的排列必然能最大化价值。

然后考虑怎么求字典序第 \(k\) 小的排列。这个肯定是和方案数挂钩的。依据刚刚的构造过程,显然有长度为 \(n\) 的令价值最大化的排列共有 \(2^{n-1}\) 种。于是依然从小到大考虑每个数字,根据 \(k\) 的大小判断是往左边还是右边加即可。时间复杂度 \(O(\sum{n})\)

T4

给出一棵 \(n\) 个点的树。你可以选择其中一条链并将链上的所有节点及其连出去的边全部从树中删去。最大化剩余的节点形成的极大连通块的数量。
对于所有测试点,\(2\leq n\leq 2\times 10^5\)

无聊题。显然剩余的节点形成的极大连通块的数量,等于与选出来的链相连的边的数量。然后直接树形 DP。令 \(f_{u,0/1}\) 表示从以 \(u\) 为根的子树中选出来的不穿过/穿过 \(u\) 的最优的链的相连边数,进行简单地分类讨论即可。时间复杂度 \(O(n)\)

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

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

相关文章

2025多校冲刺省选模拟赛3

过于困难,直接放弃2025多校冲刺省选模拟赛3\(T1\) A. 等差 \(100pts/100pts\)考虑哈希,每 \(k\) 个作为一组与上一组统一计算。取 \(Base>\) 值域时用高精度来存储并判断的正确性显然。观察到可行的最小的 \(k\) 单调不降,不妨直接枚举答案。暴力实现时间复杂度为 \(O(n…

还不会 Cert Manager 自动签发证书?一文掌握

相信很多小伙伴对于 Cert Manager 不陌生,Cert Manager 是 Kubernetes 上的证书管理工具,基于 ACME 协议与 Lets Encrypt 签发免费证书并为证书自动续期,实现永久免费使用证书。 本文将介绍如何使用 Cert Manager 实现自动签发证书并与 Rainbond 结合使用。 Cert Manager 概…

JAVA-Day 09:While循环语句

While循环 while循环格式 初始化语句; while(条件判断语句){ 循环体语句; 条件控制语句; } 初始化语句只执行一次 判断语句为True,循环继续 判断语句为False,循环结束 例: 世界最高山峰珠穆朗玛峰的高度为8844.43米=8844430毫米,假如有 一张足够大的纸,它的厚度为0.1毫米。…

rust学习十六.2、并发-利用消息传递进行线程间通讯

通过信道是rust的解决线程之间通信的2个工具之一,另外1个是是共享内存状态。 rust推出这个,明显地是因为受到go之类的影响。 在书籍中,作者提到go编程文档中的内容: 不要通过共享内存来通讯;而是通过通讯来共享内存(Do not communicate by sharing memory; instead, share…

2025,谁会成为 AI Agent 的新入口?|播客《编码人声》

「编码人声」是由「RTE开发者社区」策划的一档播客节目,关注行业发展变革、开发者职涯发展、技术突破以及创业创新,由开发者来分享开发者眼中的工作与生活。2024 年末,一群来自 Android、Chrome OS、Oculus 等操作系统的开发元老联合创业,推出 AI Agent 操作系统 /dev/agen…

【Windows内核】Ntdll解除挂钩学习

简介 我们之前都是直接通过使用直接系统调用的方式来绕过用户态钩子,通过在项目文件中创建并调用系统调用来实现此目标。还有另外一种方法也可以绕过用户态的钩子,那么这种方法是将已经加载到进程中的钩子DLL替换为一个未经修改且未被钩主的版本来达到相同的目标。 将勾住的D…

21. 主窗口控件

一、主窗口控件之前,我们使用可视控件创建具体的实例时都选择了一个父窗体,将控件放到这个窗体上,即使在创建实例时没有选择父窗体,也可以用控件的 setParent() 方法将控件放到父窗体上。如果一个控件没有放到任何窗体上,则这个控件可以单独成为窗口,并且可以作为父窗口来…

智慧帮手:一站式搭建帮助中心,优化客户服务体验

在数字化时代,客户服务已成为企业赢得市场、留住客户的关键。一个高效、便捷的帮助中心,不仅能够快速响应客户需求,还能提升客户满意度和忠诚度。然而,如何搭建一个既满足客户需求又符合企业特色的帮助中心,成为众多企业面临的挑战。本文将探讨如何借助一站式解决方案,如…

解锁餐饮新篇:精准搭建内部知识库,赋能高效运营

在当今竞争激烈的餐饮行业中,提升运营效率和服务质量已成为企业脱颖而出的关键。随着餐饮业务的不断扩展,内部信息管理和知识传承成为了一大挑战。如何构建一个高效、精准的内部知识库,成为解锁餐饮新篇章的重要一环。本文将探讨如何借助智能化工具,如HelpLook,实现这一目…

【YashanDB知识库】进行load data的时候报找不到动态库liblz4.so

本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7863047.html?templateId=1718516 现象 23.2版本的依赖项准备里指明,要依赖动态库:liblz4.so,liblz4.so.1,liblz4.so.1.9.3 在执行load data的时候报找不到动态库liblz4.so 操作系统在/lib64/目…

JAVA-Day 08:For循环语句

For循环 For循环格式 for循环语句格式 for(初始化语句;条件判断语句;条件控制语句){ 循环语句体; } 执行流程: 1、执行初始化语句 2、执行条件判断语句,看其结果是True还是False,如果是True,执行循语句体,如果是False,循环结束 3、执行条件控制语句 4、回到2继续执行条件判…

记录---JS 的蝴蝶效应 —— 事件流

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣前言 在 JavaScript 的世界里,事件流就像一只永不停歇的蝴蝶,每一个动作、每一个点击、每一个滚动,都会触发一连串的蝴蝶效应。作为一名开发者,掌握事件流的艺术,不仅能让你的网页更加生动、更加交互,也能让用户体验…