2025.10.20~2025.10.26

2022HDU多校08

A

由于只能选择奇数长度的段进行反转,因此奇偶性不同的两个位置永远不能实现交换。

而取长度为 \(3\) 的段总能使相邻两个奇偶性相同的位置进行交换,因此只需对奇子列和偶子列分别排序即可。

B

\(f_{i}\) 表示考虑前 \(i\) 个位置的划分方案数。则 \(f_{i} = \sum\limits_{1 \le j \le i \and [j, i] \text{ is ridiculous}}f_{j - 1}\)

问题就是如何快速找到那些满足条件的 \(j\)

为了解决 “最大值在哪” 这个问题,维护一个值递减的单调栈(存位置),记单调栈内相邻两个元素为 \(x, y(x < y)\),则 \(\forall j \in (x, y]\)\(\max\limits_{j \le k \le i}a_{k} = a_{y}\)

为了解决 “最大值位置为奇数” 这个问题,对奇数位置和偶数位置分别维护(开两棵线段树)。\(\forall j \in (x, y]\),若 \(j\)\(y\) 奇偶性相同,则 \([j, i]\) 能够满足最大值的条件。

最小值同理。

由于只有同时满足最大最小值的 \(j\) 才能将 \(f_{j - 1}\) 转移给 \(f_{i}\),因此不妨维护 \(cnt\) 表示区间内某个位置满足条件个数的最大值,\(sum\) 表示 \(cnt\) 最大的所有位置的 \(f\) 值之和。对于当前 \(f_{i}\),若一棵线段树全局 \(cnt\) 值为 \(2\),则 \(f_{i}\) 加上这棵线段树的全局 \(sum\) 值。更新单调栈时同时维护相应线段树上的信息。

答案为 \(f_{n}\)

C

神仙搜索,神仙状压。

对每个位置预处理出以它为起点的所有可行回文路径,路径以二进制形式存储。可以想到有效的路径数量并不多。

问题转化为:有若干二进制状态,求用这些状态不重不漏地拼出全集 \(2^{nm} - 1\) 的方案数。

直接进行记忆化搜索,每次选取二进制下最低位作为起点,枚举不与当前状态相交的路径进行递归。

经检验,\(6 \times 6\) 的全 a 矩阵有效状态数为 \(2 \times 10^{6}\) 出头。

时限 15s,放心跑。

D

签到题,直接猜答案为 \(2n\)

证明:先证明答案下界为 \(2n\):若没有与坐标轴平行的直线,则一条直线最多穿过 \(2\) 个边界点,而边界上共有 \(4n\) 个点,因此至少需要 \(2n\) 条直线;否则,假设画了 \(k_{1}\) 条横线、\(k_{2}\) 条竖线,然后划归为一个子问题,同样能说明下界为 \(2n\)

\(x + y = 1, 2, \dots, 2n\) 显然是一组直线数量为 \(2n\) 的合法解,因此答案就是 \(2n\)

E

只需预处理出每个位置能到达的范围即可 \(O(1)\) 查询,记第 \(i\) 个位置的最大可达范围为 \([L_{i}, R_{i}]\),初始化 \(L_{i} = R_{i} = i\)​。

(注意 \([L_{i}, R_{i}]\) 是不断被更新的;两个位置是否可达也要考虑当前它们已经能到达的区域)

先规定只能向右走,从后往前枚举,求出每个位置向右能走到的最远位置。

具体地:

  • 如果 \(i\) 能到达 \(i + 1\),则 \(R_{i} = R_{i + 1}\)

  • 这还没完,\(R_{i}\) 有可能比 \(R_{i + 1}\) 更大,因为 \(a_{i}\) 可能贡献出有助于扩展的质因子。所以让 \(R_{i}\) 继续向后跳,直到无法扩展为止。

    分析一下:我们记不能跳的地方为 “断点”,有 \(O(n)\) 个断点。当一个断点能够被跳过去,它就不会再被遍历。

然后再从前往后枚举,求出每个位置的最大可达范围。

具体地:

  • 如果 \(i\)\(i - 1\) 互达,则直接令 \([L_{i}, R_{i}] = [L_{i - 1}, R_{i - 1}]\),因为该情况下 \(i\)\(i - 1\) 能到达的范围一定相同。

  • 如果 \(i\) 无法到达 \(i - 1\),则位置 \(i\) 无法往前走,则它能到达的范围只能是 \([i, R_{i}]\)

  • 如果 \(i\) 能到达 \(i - 1\)\(i - 1\) 不能到达 \(i\)(即 \(R_{i - 1} = i - 1\)), 则从位置 \(i\) 向左右扩展,方法类似上述的只向后扩展的做法。

    (还不会证这个情况时间复杂度QWQ)(别急,有反转)

判断是否可达:可以用 vector 存下每个质数的出现位置,在相应的 vector 上二分查询一段区间内是否出现过该质数。


upd:官方的做法是错的,s下面这组数据能够卡掉下发的 std(来源于知乎):

#include <iostream>
#include <cstdio>
using namespace std;
int main () {//freopen("rand.txt", "w", stdout);printf("1\n");printf("200000 1\n");for (int i = 1; i <= 200000; i ++) printf("%d ", (i & 1) ? (((i + 1) % 4 == 0 ? 5 : 2)) : 3);printf("\n");for (int i = 1; i < 200000; i ++) printf("%d ", (i & 1) ? 3 : ((i % 4 == 0 ? 5 : 2)));printf("\n");printf("1 200000\n");return 0;
}

问题还是出在 \(i\) 能到达 \(i - 1\)\(R_{i - 1} = i - 1\) 的情况,官方的 std 能被卡成 \(O(n^{2}\log{n})\)


to be done.

G

先构造出这样一棵生成树:\(i\)\(i + 1\) 连边,这样每条边的边权 \(\le n - 1\)

由 Kruskal 算法的原理知,最小生成树的边权一定 \(\le n - 1\),即有用的边一定满足 \(|i - j| \times |p_{i} - p_{j}| \le n - 1\)

则一定有 \(|i - j| \le \sqrt{n - 1}\)\(|p_{i} - p_{j}| \le \sqrt{n - 1}\)

\(p\)\((1, 2, \dots, n)\) 的一个排列,所以有用的边数是 \(O(n\sqrt{n})\)

可以在 \(O(n\sqrt{n})\) 的时间复杂度找出这些边再做 Kruskal 算法,时间复杂度 \(O(n\sqrt{n}\alpha(n))\)

不要用 sort,\(O(n\sqrt{n}\log{n})\) 是无法接受的(可以用自然排列卡掉)。由于边权很小,所以直接用桶排即可。

还有注意要开 long long。

H

\(f_{u, 0 / 1/ 2}\) 分别表示仅考虑 \(x\) 子树,选择 \(x\)\(x\) 度数为 \(0\)、选择 \(x\)\(x\) 度数为 \(1\)、不选 \(x\) 的合法最大分离集大小。

然后做个简单的线性树形 DP 即可。

I

考虑 \(u \to fath_{u}\) 这一条边对答案的贡献。

如果在 \(fath_{u}\) 的子树内,操作 \((v, c, p)\)(其中 \(v\)\(u\) 的子树内)是最后一个被执行的,则 \(u \to fath_{u}\) 的颜色为 \(c\)

考虑以操作时间作为下标建立线段树,对区间 \([l, r]\) 维护 \(prod =\prod\limits_{l \le i \le r}(1 - p_{i})\)\(sum = \sum\limits_{l \le i \le r}c_{i}p_{i}\max(1, \prod\limits_{i < j \le r}(1 - p_{j}))\),前者用于方便计算 \(sum\),后者即为我们希望得到的期望值。

对操作 \((x_{i}, c_{i}, p_{i})\) 初始化线段树 \(root_{x}\) 的第 \(i\) 个位置,然后做线段树合并。

合并到以 \(u\) 为根的子树时,统计 \(u\) 子树内除了在点 \(u\) 处之外的所有操作对 \(v \to u(v \in son_{u})\) 的贡献。

这些贡献加起来就是整棵树的期望边权和。

K

枚举某一维的边长即可。

L

显然 \(k\) 为奇数时无解。

不妨转化为数列问题:构造一个有限数列 \(\{ a_{1}, a_{2}, \dots, a_{d} \}\),数列需要满足以下条件:

  • \(a_{1} \le 1\)

  • \(a_{i} \le 2a_{i - 1}\)

  • \(w = \sum\limits_{1 \le i \le d}ia_{i} = \frac{k}{2}\)

数列 \(a\) 对应树的节点数为 \(1 + 2\sum\limits_{1 \le i \le d}a_{i}\),数列 \(a\) 的字典序关系与深度序列的字典序关系一致。

为了最小化节点数,即最小化 \(s = \sum\limits_{1 \le i \le d}a_{i}\),一个显然的思路是令所有 \(a_{i}\) 尽量等于 \(1\),这样一来可以确定 \(d\) 的上界是 \(O(\sqrt{n})\) 级别的。

不妨设有一个全 \(1\) 数列,且其项数 \(d\) 满足 \(\sum\limits_{1 \le i \le d}i = \frac{d(d + 1)}{2} \le \frac{k}{2}\)\(d(d + 1) \le k\)

如果 \(d(d + 1) = k\):该结构就是合法的最优解,直接输出即可。

否则,数列 \(a\) 必须进行一定的改动。比如,\(s \ge d + 1\)

如果仍然在 \(d\) 项全 \(1\) 数列的基础上思考,并考虑如何让 \(a_{i} = 1\) 变成 \(a_{i} = x\),那么问题会很棘手。

项数 \(d\) 不应该成为绊脚石,全 \(1\) 数列不应该成为绊脚石,毕竟它们不是答案的第一决定因素。

但这并不意味着先前的工作一无是处。比如,我们知道了 \(s \ge d + 1\)

那就让 \(s\) 来主导思考的方向吧!

一个 \(s\) 值可以确定 \(w\) 的上下界:下界的情况就是把深度较浅的节点填满,上界的情况就是全 \(1\) 数列。为方便表示,记 \(V_{w}(s)\) 表示 \(s\) 所确定的 \(w\) 的取值集合。

我们可以肯定:\(K = \frac{k}{2}\) 小于 \(V_{w}(d + 1)\) 的上界。

那么下界如何呢?

  • \(\inf{V_{w}(1)} = 1\)\(\sup{V_{w}(1)} = 1\)
  • \(\inf{V_{w}(2)} = 3\)\(\sup{V_{w}(2)} = 3\)
  • \(\inf{V_{w}(3)} = 5\)\(\sup{V_{w}(3)} = 6\)
  • \(\inf{V_{w}(4)} = 8\)\(\sup{V_{w}(4)} = 10\)
  • \(\inf{V_{w}(5)} = 11\)\(\sup{V_{w}(5)} = 15\)
  • \(s \ge 5\) 时:总有 \(\sup{V_{w}(s)} \ge \inf{V_{w}(s + 1)} - 1\)

即:除 \(K = 2, 4, 7\)\(k = 4, 8, 14\) 外,\(K = \frac{k}{2}\) 一定介于 \(V_{w}(d + 1)\) 的上下界之间。

事情的发展开始变得清晰;我们很清楚我们希望看到怎样的结论:\(V_{w}(s)\) 是一段连续的值域。

正确性显然!从下界的情况出发,每次选取最大的 \(a_{i} > 1\),令 \(a_{i + 1}\) 加一,\(a_{i}\) 减一。在到达上界之前,该操作总可以被执行,\(a\) 序列也总是合法,且 \(w\) 每次增加 \(1\)

也就是说,\(s = d + 1\) 时一定有解!

于是我们证明了答案的存在性。

接下来,为了最小化序列字典序,我们希望深度较浅的节点数较少,即序列 \(a\) 中靠前的元素值较小。

假设我们已经确定了 \(a_{1} \sim a_{i - 1}\),令 \(s^{'} = s - \sum\limits_{1 \le j < i}a_{j}\)\(K^{'} = \frac{k}{2} - \sum\limits_{1 \le j < i}ja_{j}\)

此时 \(s^{'}\) 当然也确定了 \(w^{'} = \sum\limits_{j \ge i}ja_{j}\) 的上下界,并且 \(w^{'}\) 值域连续,原理同上。我们假定在之前的构造过程中,保证进行到这一步时:\(s^{'}\) 可以确定出一段 \(w^{'}\) 的值域包含 \(K^{'}\)。初始条件即 \(s = d + 1, K = \frac{k}{2}\),显然满足。

但是,\(s^{'}\) 具体(即考虑了 \(a_{i}\) 之后)决定了 \(w^{'}\) 的一段怎样的值域,还要取决于 \(a_{i}\) 的取值。

一个显然的性质是:\(w^{'}\) 的值域上下界均关于 \(a_{i}\) 单调不增。

如果 \(a_{i}\) 过小,\(K^{'}\) 可能小于 \(w^{'}\) 的下界;如果 \(a_{i}\) 过大,\(K^{'}\) 可能大于 \(w^{'}\) 的上界。

我们希望字典序尽量小,即 \(a_{i}\) 取一个使得 \(K^{'}\)\(w^{'}\) 值域内的最小值即可;由于先前的限制,这样的 \(a_{i}\) 一定存在,且是以最优解存在。(所以我们不需要考虑上界;上界一定满足条件)

根据上述类似数学归纳法的算法流程,合法且字典序最小的序列被唯一确定。

时间复杂度 \(O(T\sqrt{k}\log{k})\)

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

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

相关文章

Day10复合选择器

复合选择器分为后代选择器,子代选择器,交集选择器和并集选择器 1.后代选择器即跨过父类,而在该父类下的所有该后代选择器所对应的标签都会被应用 <!DOCTYPE html> <html lang="en"> <head…

2025.10.27~2025.11.02

2025.10.27~2025.11.022022HDU多校09 A Problem \(T\) 组数据。给定一个长为 \(n\) 的数列 \(a\),判断是否能将其重排为数列 \(b\) 使 \(b\) 中不存在 \(1 \le i < j < k \le n \and a_{j} - a_{i} = a_{k} - a…

一次 Windows 内核卡住的调试经历

记录一次 Windows 内核卡住的调试经历一次 Windows 内核卡住的调试经历 今年整了个电脑,本想提升生活游戏体验,却被一个及其影响体验的问题折磨了三个月,后来终于算是得到了解决(规避)。过程是曲折的,结果是比较…

SQCTF-web

SQCTF-web小小查询系统 Upload_Level1 Upload_Level2 baby_rce 无参之舞 千查万别 eeaassyy ez-include 内部威胁情报监控平台 ez-sqli 黑客终端 PHP的XXE PHP的后门 CTF商城 Easy_SQLi EasyMD5 雏形系统 简单越权 inc…

websocket在秒杀场景下连接过多的问题

这可能是很多人第一次在高并发场景(尤其是秒杀活动)引入 WebSocket 时最容易忽略的隐患点之一。 有两点非常关键:1️⃣ 高并发场景下 WebSocket 连接数过多; 2️⃣ WebSocket 是否占用 Spring Boot / Tomcat 的 We…

团队作业1-团队展示与选题

团队作业1-团队展示与选题团队展示and选题这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23Comput…

websocket是什么以及它要怎么用

WebSocket 实时通知机制。在高并发、异步下单场景中,它是提升用户体验、降低轮询压力的关键组件。 接下来会从原理讲清楚,再结合“秒杀活动”落地展示完整的前后端交互与代码实现(Java Spring Boot + 前端示例)。一…

每日一题:第474场周赛 Q1. 找出缺失的元素

给你一个整数数组 nums ,数组由若干 互不相同 的整数组成。 数组 nums 原本包含了某个范围内的 所有整数 。但现在,其中可能 缺失 部分整数。 该范围内的 最小 整数和 最大 整数仍然存在于 nums 中。 返回一个 有序 …

上一次的参考文献

Charles M, Ochieng S B. Strategic outsourcing and firm performance: a review of literature[J]. International Journal of Social Science and Humanities Research (IJSSHR) ISSN, 2023, 1(1): 20-29. Kocot D,…

思维的漫游者:叙事性所揭示的非目的性心智

思维的漫游者:叙事性所揭示的非目的性心智 我们习惯于将思维描绘成一个猎手:带着明确的问题,在知识的森林中进行“强势搜索”,直至捕获答案。然而,“内观照叙事模型”所揭示的思维图景,更像一个漫游的诗人——它…

C++练习02

//计算复数 #include <iostream> #include <iomanip> using namespace std; typedef struct{float x;float y; }Comp; //打印复数的函数 void Printer(Comp res) {if (res.x == 0 && res.y == 0) …

软件技术基础

项目 内容这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/25rjjc这个作业的目标 实现一个命令行文本计数统计程序姓名 - 学号 周嘉俊 - 2023329301123码云仓库地址 https://gitee.com/rt666666/wc.exe

I2C to 16-Bit GPIO Expander with Interrupt TPT29555A

The TPT29555A is a 16-bit GPIO expander with interruption and weak pull-up resistors for I2C-bus applications. The power supplier voltage range is from 1.65 V to 5.5 V, allowing the TPT29555A to interc…

2025年数据分类分级工具选型指南:智能合规基座与八大产品全景评估

2025年数据分类分级工具选型指南:智能合规基座与八大产品全景评估基于对八款主流产品的深度测试与评估,AI-FOCUS团队研发的成竹AI数据分类分级助手在综合智能化程度、部署灵活性、硬件要求与成本可控性方面表现卓越,…

国产化数据库迁移工具不会用?教你手搓一个万能数据迁移工具。

国产化数据库迁移工具不会用?教你手搓一个万能数据迁移工具。手搓数据库迁移工具需要考虑迁移的数据量、源数据库和目标数据库的类型、版本和兼容性等问题,使用SOD框架可以很方便的解决这些问题。为什么要手搓一个自…

【UE引擎解构】- 引擎基础 :基本组件

前言: UE推崇"组合大于继承"的思路,因此组件在UE中代表功能的具体载体 "UActorComponent 是所有组件的基类。由于组件是渲染网格体和图像、实现碰撞和播放音频的唯一方法,因此玩家游戏期间在场景中看…

思维的“幽灵显影”:神经科学捕捉意义重燃的独特签名

思维的“幽灵显影”:神经科学捕捉意义重燃的独特签名 我们都有过这样的体验:一个被打断的念头,在数小时后悄然复现,并瞬间接续。传统科学将其解释为记忆的简单“提取”。然而,一项基于“内观照叙事模型”的新假说…

搜索百科(6):Meilisearch — Rust 打造的轻量级搜索新锐

《搜索百科》专栏系列,本文主要介绍 Meilisearch,它是一个使用 Rust 语言编写的开源、轻量级搜索引擎,以其极致的性能、简单的部署和友好的开发者体验而闻名。Meilisearch 不基于 Lucene,采用全新的架构设计,特别…

软件工程--团队作业

作业信息:这个作业属于哪个课程 首页 - 计科23级34班 - 广东工业大学 - 班级博客 - 博客园这个作业要求在哪里 团队作业1——团队展示&选题 - 作业 - 计科23级34班 - 班级博客 - 博客园这个作业的目标 组建团队 ; …

C++练习1

#include <stdio.h>struct complex{int real;int imag; };//结构体定义:分为实部和虚部struct complex multiply(struct complex x, struct complex y); //函数声明 int main() {struct complex product, x, y;…