2025.10.27~2025.11.02

2022HDU多校09

A

Problem

\(T\) 组数据。给定一个长为 \(n\) 的数列 \(a\),判断是否能将其重排为数列 \(b\) 使 \(b\) 中不存在 \(1 \le i < j < k \le n \and a_{j} - a_{i} = a_{k} - a_{j}\)。如果能,请输出任意满足条件的重排数列 \(b\)

\(1 \le T \le 25\)\(1 \le n \le 5000\)\(1 \le a_{i} \le 10^{9}\)

Solution

如果一个数出现了三次及以上,判定无解。

否则,按以下方法构造答案:

  • 将所有偶数放在前面,所有奇数放在后面。这样偶数与奇数之间不会产生三项等差数列。
  • \(a_{i}\) 变成 \(\lfloor \frac{a_{i}}{2} \rfloor\),递归下去继续分治处理。
  • 直到区间长度 \(\le 2\),停止递归。

更简单的实现方法是:令 \(b_{i} = a_{i} \oplus (2^{30} - 1)\),对 \(a\)\(b\) 排序,正确性显然。

时间复杂度 \(O(n\log{V})\)

C

Problem

\(T\) 组数据。定义 \(B(A)\) 表示将数列 \(A\) 经过一次冒泡排序后得到的数列。定义一次操作为选择一段区间循环左移或循环右移一位。现在给定一个长度为 \(n\) 的排列 \(a\)\(Q\) 次询问将 \(a[l, r]\) 变成 \(B(a[l, r])\) 的最小操作次数。

\(1 \le T \le 10\)\(1 \le n, Q \le 10^{5}\)

Solution

给定的操作其实就是将任何一个数字插到任意位置。

先考虑求出区间 \([1, n]\) 的答案。

\(p_{i} = \min\limits_{j > i \and a_{j} > a_{i}}j\)\(p_{i}\) 可以用单调栈 \(O(n)\) 求出。

\(w_{i}\) 表示区间 \([i, n]\) 的答案,则 \(w_{i} = [p_{i} > i + 1] + w_{p_{i}}\)

套路地,这种跳跃过程可以用倍增优化,从而实现对任意区间 \([l, r]\)\(O(\log{n})\) 的时间内求出答案。

时间复杂度 \(O((n + Q)\log{n})\)

D

Problem

\(T\) 组数据。给定 \(k\) 个有向图游戏 \((G_{1}, s_{1}), (G_{2}, s_{2}), \dots, (G_{k}, s_{k})\),其中 \((G_{i}, s_{i})\) 表示在 \(G_{i} = (V_{i}, E_{i})\)\(s_{i} \in V_{i}\) 为起点进行的有向图游戏。在一个有向图游戏中,Alice 先手,Bob 后手,两人均按最优方案移动,无法移动者输。对于多个有向图游戏的并集,两人在每个有向图游戏中同时交替操作,如果存在一个有向图使得其中某人无法移动,则这个人输。

现在 Alice 想要在这 \(k\) 个有向图游戏组成的集合中选择一个非空子集使得她为胜者,求选择的方案数。答案对 \(998244353\) 取模。

\(1 \le T \le 5\)\(1 \le k \le 10^{6}\),单组数据满足 \(\sum\limits_{i = 1}^{k}|V_{i}|, \sum\limits_{i = 1}^{k}|E_{i}| \le 2 \times 10^{6}\)

Solution

对于一个有向图游戏,每个点的胜负状态都是确定的;

而对于多个有向图游戏,如果 \(s_{i}\) 是必胜的,则希望尽量快地获胜;如果 \(s_{i}\) 是必败的,则希望尽量拖延时间。则我们的目的就不仅仅是计算出一个点的状态是必胜还是必败,还要计算出必胜时的最短时间和必败时的最长时间。

考虑一个有向图游戏 \((G, s)\),记 \(f_{u}\) 表示:

  • \(f_{u} = 0\):点 \(u\) 为起点平局。
  • \(f_{u} > 0\):点 \(u\) 为起点必胜,\(f_{u}\) 表示获胜的最短时间。
  • \(f_{u} < 0\):点 \(u\) 为起点必败,\(-f_{u}\) 表示输掉游戏的最长时间。

下面分析如何求出 \(f\)

  • 不妨建出原图的反图 \(G^{'} = (V^{'}, E^{'})\)。以下过程均在 \(G^{'}\) 上进行。

  • 取出 \(G^{'}\) 中所有入度为 \(0\) 的点 \(u\),初始化 \(f_{u} = -1\)。其它点初始化 \(f_{v} = 0\)

  • 按拓扑序更新 \(f_{v}\)。对于点 \(v\)

    • 如果存在入点 \(u\) 满足 \(f_{u} < 0\),则 \(v\) 是一个必胜点,\(f_{v} = \min\limits_{(u, v) \in E^{'} \and f_{u} < 0}(-f_{u} + 1)\)
    • 如果所有入点 \(u\) 均满足 \(f_{u} > 0\),则 \(v\) 是一个必败点,\(f_{v} = \min\limits_{(u, v) \in E^{'}}(-f_{u} - 1)\)
    • 如果所有入点 \(u\) 满足 \(f_{u} \ge 0\) 且存在 \(f_{u} = 0\),则 \(v\) 是一个平局点,\(f_{v} = 0\)
    • 所有没有被遍历到的点 \(v\) 判不出胜负,\(f_{v} = 0\)

    同时有必要说明以上过程的实现。对于 \(f_v\),我们只需考虑以下两种情况时的更新:

    • 第一次遍历到满足 \(f_{u} < 0\) 的边 \((u, v) \in E^{'}\),更新 \(f_{v} = -f_{u} + 1\)
    • 遍历完 \(v\) 的入边,不存在 \(f_{u} < 0\) 的边 \((u, v) \in E^{'}\),更新 \(f_{v} = -f_{u} - 1\)

    利用 \(f\) 的特殊性和广搜的最优性,巧妙地规避了对环的处理。

对每个图独立求出 \(f\) 后,记 \(w_{i}\) 表示第 \(i\) 个有向图游戏中 \(f_{s_{i}}\) 的值。

记集合 \(S_{win} = \{ i | w_{i} > 0 \}\)\(S_{lose} = \{ i | w_{i} < 0 \}\)

则一个有向图游戏集合 \(S\) 满足 Alice 必胜,当且仅当 \(\min\limits_{i \in S \and i \in S_{win}}w_{i} < \min\limits_{i \in S \and i \in S_{lose}}(-w_{i})\)

\(S_{win}\)\(S_{lose}\) 排序后容易计算出方案数。注意到由于 \(|w_{i}| \le |V_{i}|\),因此可以使用桶排在线性时间内解决。

注意,有可能存在 \(w_{i} = 0\),答案还要乘上系数 \(2^{\sum\limits_{i = 1}^{k}[w_{i} = 0]}\)

时间复杂度 \(O(\sum\limits_{i = 1}^{k}|V_{i}| + \sum\limits_{i = 1}^{k}|E_{i}|)\)

F

Problem

\(T\) 组数据。给定一个长为 \(n\) 的数组 \(a\)\(Q\) 次询问,每次询问给定区间 \((l, r]\) 和一个非负整数 \(x\)

  • 从左往右遍历 \(a(l\dots r]\),如果 \(x + a_{i} \ge 0\),则 \(x\) 变为 \(x + a_{i}\),否则 \(x\) 不变。

求遍历完成后 \(x\) 的值。询问互相独立。

\(1 \le T \le 4\)\(1 \le n, Q \le 5 \times 10^{5}\)\(\sum\limits_{i = 1}^{n}|a_{i}| \le 10^{6}\)\(0 \le x_{i} \le 10^{6}\)

Solution

由于 \(\sum|a_{i}|\) 较小,因此可以对初始值小的 \(x\) 暴力维护答案。

具体地,开一棵线段树,对每个区间维护值 \(sum, lim\) 和一个 vector 数组 \(vec\)\(sum\) 表示区间 \(a_{i}\) 之和,\(lim\) 表示区间负数绝对值之和,\(vec\) 的大小为 \(lim\)\(vec[x](0 \le x < lim)\) 表示以初始值 \(x\) 开始遍历这个区间得到的终值。而如果以初始值 \(y \ge lim\) 遍历这个区间,则终值总是 \(y + sum\)。综上,维护以上信息可使得遍历线段树上一段区间的时间复杂度是 \(O(1)\) 的。这些信息是容易维护的,其中维护 \(vec\) 数组的时间复杂度为 \(O(\sum\limits|a_{i}|\log{n})\),可以接受。

询问时在线段树上暴力跳 \(O(\log{n})\) 次即可。总时间复杂度为 \(O((n + Q + V)\log{n})\),其中 \(V = \sum|a_{i}|\)

tips:传参不要用 SegTree 类型。由于每个节点挂了一个 vector,调用一个节点的复杂度并非 \(O(1)\)

G

Problem

\(T\) 组数据。给定长度为 \(n\) 的递增数列 \(a\) 和正整数 \(k, r\),求将这 \(n\) 个数分成 \(k\) 组且同一组中的数两两之间差值不小于 \(r\) 的方案数。答案对 \(998244353\) 取模。

\(1 \le T \le 20\)\(1 \le k \le n \le 5000\)\(1 \le r \le 10^{9}\)\(1 \le a_{1} \le a_{2} \le \dots \le a_{n} \le 10^{9}\)\(\sum{n} \le 50000\)

Solution

\(f_{i, j}\) 表示考虑前 \(i\) 个人偶分成 \(j\) 组的方案数。

考虑如何从 \(f_{i - 1}\) 转移到 \(f_{i}\):显然,\(a_{i}\) 不能分到装有 \(a_{k} > a_{i} - r\) 的组。

\(w = \sum\limits_{1 \le k < i}[a_{k} > a_{i} - r]\),则有一个显然但容易被忽略的性质是,这 \(w\)\(a_{k}\) 不能被分到同一个组,即之前分的 \(j\) 个组中必有 \(w\) 个组是不能装 \(a_{i}\) 的,而其它组是都能装 \(a_{i}\)。即如果 \(a_{i}\) 要装进之前的组中,则转移系数是确定的,这是该题最关键的一点。

转移式就简单了:\(f_{i, j} = f_{i - 1, j - 1} + f_{i - 1, j} \times \max(0, j - w)\)

时间复杂度 \(O(n^{2})\)

H

Problem

现有一张 \(n\) 个点的完全图,点 \(i\) 与点 \(j\) 之间的边权为 \(\gcd(i, j)\)

\(Q\) 组询问 \((u, v)\),求 \(u\)\(v\) 的最短路长度即方案数。方案数对 \(998244353\) 取模。

\(2 \le n \le 10^{7}\)\(1 \le Q \le 50000\)\(u \neq v\)

Solution

极端情况:\(u \to 1 \to v\),长度为 \(2\)。因此任意两点的最短路长度不会超过 \(2\)

\(\gcd(u, v) = 1\),则仅有 \(u \to v\) 一条最短路,长度为 \(1\)

否则,最短路长度为 \(2\),数量为 \([\gcd(u, v) = 2] + \sum\limits_{1 \le k \le n}[\gcd(u, k) = 1][\gcd(v, k) = 1]\)

\[\begin{align} \sum\limits_{1 \le k \le n}[\gcd(u, k) = 1][\gcd(v, k) = 1] &= \sum\limits_{1 \le k \le n}[\gcd(u, k) = 1] + \sum\limits_{1 \le k \le n}[\gcd(v, k) = 1] - \sum\limits_{1 \le k \le n}[\gcd(\text{lcm}(u, v), k) = 1] \\ \end{align} \]

下面计算 \(\sum\limits_{1 \le k \le n}[\gcd(x, k) = 1]\)

\[\begin{align} \sum\limits_{1 \le k \le n}[\gcd(x, k) = 1] &= \sum\limits_{1 \le k \le n}\sum\limits_{d | \gcd(x, k)}\mu(d) \\ &= \sum\limits_{d | x}\mu(d)\sum\limits_{k = 1}^{n}[d | k] \\ &= \sum\limits_{d | x}\mu(d)\lfloor \frac{n}{d} \rfloor \\ \end{align} \]

但由于 \(x\) 最大范围能达到 \(O(n^{2})\),而上式的计算是 \(O(\sqrt{x})\) 的,因此单次计算 \(O(n)\)\(Q\) 组询问下无法接受。


考虑拆解 \(u, v\),得到 \(u, v\) 的质因数集合 \(S = \{ p_{0}, p_{1}, \dots, p_{m} \}\)

经典结论,\(|S| = m\) 不会很大,前 \(13\) 个质数的乘积已经超过 \(10^{14}\),这意味着 \(m \le 12\)

然后枚举 \(S\) 的子集进行容斥计算出 \(1 \sim n\) 内包含 \(S\) 中的质因数的数的个数 \(w\),则 \(\sum\limits_{1 \le k \le n}[\gcd(u, k) = 1][\gcd(v, k) = 1] = n - w\)

我实现的时间复杂度 \(O(Qm2^{m})\)。吐槽:\(998244353\) 就是个幌子。

I

Problem

\(T\) 组数据。给定整数 \(n, l, r, x\),求所有长度为 \(n\) 且满足以下条件的数列 \(a\) 中:

  • \(\forall 1 \le i \le n\)\(l \le a_{i} \le r\)
  • \(\bigoplus\limits_{i = 1}^{n}a_{i} = x\)

\(\sum\limits_{i = 1}^{n}a_{i}\) 的最大值。如果不存在满足条件的数列 \(a\),输出 \(-1\)

\(1 \le T \le 3000\)\(1 \le n \le 10^{9}\)\(0 \le l \le r \le 10^{9}\)\(0 \le x \le 10^{9}\)

Solution

首先通过分析最优解的结构以缩小问题规模。

如果有解,则最优解中至多有 \(\log{V}\)\(a_{i} \neq R\)

证明使用反证法:假设存在 \(> \log{V}\)\(a_{i} \neq R\),则其中一定存在两个元素低位连续的 \(1\) 数量相等,可以将这两个元素同时加一而不改变整体异或和且使 \(\sum{a_{i}}\) 变大。

\(f_{i, j, k}\) 表示考虑到第 \(i\) 位(从高到低枚举),有 \(j\) 个数字紧贴下边界 \(L\)\(k\) 个数字紧贴上边界 \(R\),且第 \(i\) 位及更高位的异或和恰与 \(X\) 相同的情况下能得到的最大价值(也只考虑第 \(i\) 位及更高位)。

我实现的时间复杂度 \(O(\log^{5}{V})\)

J

Problem

\(T\) 组数据。给定 \(n\) 个数字 \(a_{1}, a_{2}, \dots, a_{n}\),每次可以选两个数字 \(x, y\) 合并成 \(xy + x + y\)\(n - 1\) 次操作后只剩下一个数字,求这个数的期望值。答案对 \(998244353\) 取模。

\(1 \le T \le 20\)\(1 \le n \le 500\)\(0 \le a_{i} < 998244353\)

Solution

\(c = ab + a + b = (a + 1)(b + 1) - 1\)

\(cd + c + d = (c + 1)(d + 1) - 1 = (a + 1)(b + 1)(d + 1) - 1\)

...

由此可见,无论操作顺序如何,最终的值一定是 \(\prod\limits_{i = 1}^{n}(a_{i} + 1) - 1\)

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

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

相关文章

一次 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;…

2025.11.2总结

今天继续软考的学习,学设计模式的时候学不动了,稍微记一下三大类,23种,创建型5种,结构型7种,行为型11种。还行 创建型五种,也记住了工厂方法模式,抽象工厂模式,建造者模式,原型,单例模式。概念过了一遍,背…

第二届数证杯初赛-计算机取证

第二届数证杯初赛 容器密码:GQ7aXryvOCM8qGeXa19K9g&jtHSGtrimps@QxaYt4oRwwKHeN0A$#EPv*u 计算机取证分析 请根据计算机检材…