GJ Round (2024.9) Round 1~7

· · 个人记录

前言:

洛谷、博客园、CSDN 同步更新

点此 返回 GJ Round 目录(博客园)

博客园 可能食用更佳

Tip:博客园不等号渲染有问题,就像这样:\neq

Round 1 (9.10)

A

洛谷 P10059 Choose

给定一个长度为 n 的序列 a,你需要选出 ak 个长度均为 L(1 \leq L \leq n-k+1) 的不同连续子序列 C(a,l_1,l_1+L-1),C(a,l_2,l_2+L-1),\dots,C(a,l_k,l_k+L-1),其中 1 \leq l_1 < l_2 < \dots < l_k \leq n-L+1

记这 k 个子序列中极差的最小值为 X,你需要求出 X 的最大值。同时,你还需要求出,在满足 X 最大的情况下 L 的最小值。

不难发现结论:记长度为 L 时对应的 X 最大值为 f(L),则 f(L) 单调不降

那么就可以考虑使用二分求出最小的 L,区间静态最值可以考虑使用 ST 表预处理或者使用单调队列,这里笔者使用了 ST 表

时间复杂度 \mathcal O(T n \log^2 n),若使用单调队列则时间复杂度为 \mathcal O(T n \log n)

到这里可能需要卡卡常才能过,其实还有更优的时间复杂度

瓶颈在求 L 的最小值,对于每个长度 L,考虑记极差不小于 X 最大值的区间数为 c_L

不难发现,当左端点固定,右端点从左到右移动时,c_L 具有单调性,那是因为区间极差具有单调性

将左端点排序后,右端点具有单调性,那么可以考虑使用单调队列+双指针求解,因为每次都是连续的区间,故可以考虑使用差分数组辅助统计,最后再累加前缀和即可

时间复杂度 \mathcal O(Tn)

B

对于一个 01x,将任意一个非空子串反转,称为一次操作

定义 x 的权值为使得 x 满足 01 交替的最少次数,多次询问,给定 l,r,求出 s 的字串 \overline{s_l s_{l+1} \dots s_r} 的所有非空子序列的权值之和,答案对 10^9+7 取模

咕咕咕

C

n 个点,第 i 个点权值为 w_i,其中仅 s 点为黑色,其余点为白色,每次可以花费 p_i 的代价将点 i 的颜色转换为点 a_i 的颜色

求最终所有黑色点的点权减去总花费代价的最大值

咕咕咕

Round 2 (9.12)

A

形式化题意:给定两个长度分别为 n,m0,1 序列 a,b

定义 c_{i,j}=a_i \times b_j,问 c 矩阵中有多少个子矩形满足其中 1 的个数恰好k

题目显然是问:有多少种方案,使得在 a 中连续选一段区间,包含 x1,在 b 中连续选一个区间,包含 y1xy = k

考虑分别记录 1 \leq i \leq n,a_i=11 \leq j \leq m,b_j=1 的位置,显然可以枚举 k 的因数,然后上桶和前缀和,做完了

时间复杂度(记 n,m 同阶) \mathcal O(nd(k)),其中,d(k) 表示 k 的因数的个数

B

由于能源不足,$B$ 国的第 $í$ 条道路只能正常运行 $d_i$ 个时刻。现在云浅需要给每一条道路选择一个开始运行的时间 $s_i$,那么这条道路就会在 $[s_i,s_i+d_i-1]$ 这些时刻内正常运行。保证 $d_i \geq 1 随着 $B$ 国的发展,现在 $B$ 国已经可以对道路进行有限的能源扩充。具体地,大守护者可以给第 $i$ 条道路扩充 $a_i$ 个单位的能源,使得其最大运行时间 $d_i$ 增大为 $d_i+a_i$。由于能源有限,$a_1+a_2+\dots+a_m$ 的值不能超过给定的正整数 $L$。大守护者想让你协助她找到一种扩充能源的方案 $a_1,a_2,\dots,a_m$,使得在扩充能源后,可能的最大连通度尽可能大。你只需要输出可能的最大连通度即可。

观察到题目给出的条件 m \leq n,那么这个图就只可能是森林(和树)或者是基环树

不难发现,在树上的时候,所能得到的最大连通度为其最小的边权,在环上时,所得到的的最大连通度为其最小与次小的边权之和

那么,我们可以考虑二分答案,check 函数里面补齐边权小于 mid 的边至 mid,计算花费即可

预处理找环用 dfs 即可,时间复杂度 \mathcal O(T n \log L),注意开 long long 即可

C

Yoimiya 有一个 n 个点的有向图,对每个 1 \leq i \leq n,图中都存在一条有向边 i \to i+1

此外,Yoimiya 从这 n 个点中选出了若干个点构成了一个集合 S,然后对于 S 中的任意两个元素 x,y 满足 x<y,她在图中新加了一条边 x \to y

现在云浅会选出一个 1,2,\dots,n 的排列 p,对于这个排列,云浅会构建一个长为 n 的序列 w,其中 w_i 的值为:如果删掉图中的 p_1,p_2,\dots,p_{i-1} 这些点以及和它们相邻的所有连边,当前图中满足 x<y ,且x 能够只通过此时剩下的点和边到达 y 的点对 (x,y) 的个数。

对于排列 p,云浅定义 f(p) 为其对应的 w_1,w_2,\dots,w_n 之和。现在云浅想要求出所有排列 pf(p) 之和对 998244353 取模的值。

咕咕咕

D

对于正整数 n,Elysia 定义 f(n) 为:将 n 在十进制下的每一位取出,并分成两个集合 S,T,使得每个数位恰好被分在 S,T 中的一个里,要求最小化 S 中元素的和与 T 中元素的和之差。

例如,f(123)=0,最优方案是取 S=\lbrace 1,2 \rbrace,T=\lbrace 3\rbracef(1235)=1,最优方案是取 S=\lbrace 1,5 \rbrace,T=\lbrace 2,3 \rbrace

现在 Elysia 给了你 Q 次问,每次问给出 l,r,k,你需要输出有多少个正整数 x 满足 l \leq x \leq r,且 f(x) \leq k

咕咕咕

Round 3 (9.18)

A

下面给出一些定义:

  • 对于一个长度为 k 的序列,f(a)=\sum_{i=1}^{k} [a_i=i]

给定一个长度为 n 的序列 A,求 A 的所有非空子序列 Sf(sort(S)) 之和,答案对 10^9+7 取模

第一眼:串串题,第二眼:简单数学题

考虑将每一个 a_i 分别拆开计算贡献计算对应的 a_i=i 时所产生的贡献即可

答案即为 ans=\sum_{i=1}^{n} {i-1 \choose a_i-1} \times 2^{n-i}

B

按顺序从 1n 拿盘子,对于每个盘子,你可以选择不要,也可以拿走,但拿走盘子需要满足下面三个条件至少一个:

  • 之前没有拿过盘子;

  • 这个盘子的尺寸比之前拿走的盘子的都大,这样你就可以把之前买的盘子叠在它的上面;

  • 这个盘子的尺寸比之前拿走的盘子的都小,这样你就可以把它叠在之前买的盘子的上面。

最后,你想知道,你最多能拿走多少个盘子?

从结尾开始做最长上升和最长下降子序列,二分或线段树优化 dp 即可

时间复杂度 \mathcal O(n \log n)

C

有一个 n \times m 的矩阵 a,你可以花费 a_{i,j} 的代价来管辖第 ij 列,求管辖整个矩阵的最小代价

CF875F Royal Questions 改版

考虑将平面内的每一行每一列连边

求最大权值基环森林

跟最大生成树差不多,用 Kruskal 跑再稍微改一下就差不多了

时间复杂度 O(E \log E),其中 E=nm

D

天道酬勤,你已经精通了 OI。

你认为 OI 的学习可以分为 n 个阶段,在经历第 i 个阶段时,如果自身能力值大于 a_i,那么就可以得到 b_i 的进步,也就是能力值累加上 b_i

并不是每个 Oler 都会完整的走完 n 个阶段,你观察了 q 个 Oler,第 i 个 Oler 会带着 x_i 的初始能力值依次经历第 l_i,l_{i+1},\dots,r_i 个阶段。

他们都还在路上,而你想知道他们最终会变得多强,也就是经历完这些阶段后的能力值。

由于某些原因,有时候你急切的想知道答案。

数据结构(DS)题

咕咕咕

Round 4 (9.19)

A

给定序列 a_{1 \dots n},b_{1 \dots n},求:

\sum_{i=n}^{n} \sum_{j=1}^{n} \sqrt{\lfloor |a_i-b_j| \rfloor}

其中,\sum a_i,\sum b_i \leq 10^7

SB 题,题目还叫什么还什么困难卷积

不同的 a_i,b_i 只有 \mathcal O(\sqrt{sum}) 个,排序去重模拟即可

B

CF623C Electric Charges

二分答案,转化为判定性问题

预处理前后缀最大最小值,分别对于 xy 得到极长段来求答案,然后就没了

C

定义 \operatorname{Prime} 为质数 求:

\left(\sum_{i=0}^{p-1} a_i \times m^i \right) \bmod p

其中,p \in \operatorname{Prime},1 \leq m < p,a_0=1,a_1=2,a_2=6 ,\dots

数论题,不会做

咕咕咕

D

红茶国有 m 个部落,为了争夺 n 个有灵气的矿洞里的资源,部落之间经常发生冲突。矿洞被标号为 1n,每个矿洞初始都被至多一个部落所占领。平时的矿洞里没有任何有价值的资源,珍贵之物只有在特定的时候才会出现,具体地,依次会有 q 次事件发生,每次事件形如:

  • 1 l r xx 号部落发起战争,占领了编号为 lr 的矿洞,原先占有这些矿洞的部落将会失去它们,转而由 x 号部落来占领;

  • 2 l r x:编号为 lr 的矿洞灵气爆发,都出现了价值为 x 的宝物。

一旦一个部落占领的矿洞里有宝物,宝物会立即被全部取走。为了知道哪些部落能成为王,你需要求出 q 次事件发生之后,每个部落分别得到的宝物的价值总和。

数据结构(DS)题

赛时着真做结果因为复杂度写假了T飞了

听说正着写能用 set 维护颜色段,但笔者不会

由于没有强制在线,可以考虑时光倒流,这样就不用考虑正着做部落具有占领权这一问题,那就基本上是区间加、区间覆盖、区间查询的模板线段树题

最后再把一开始部落占有的矿洞再 query 一下就好了

时间复杂度 \mathcal O(q \log n)

Round 5 (9.24)

A

你是一个人工智能,你需要帮助小 A 完成一局麻将游戏。

A 十分喜欢立直麻将这种棋牌游戏,而不论是什么麻将,麻将都拥有相似的胡牌规则,小 A 想要作为人工智能的你来回答,对于给定的一幅手牌,其是否符合麻将的一般型(面子手)中的胡牌型。

此外,为了增加难度,小 A 还会考验你给定一幅听牌的手牌,问这幅手牌听什么牌(也就是多获得一张什么样的牌可以胡牌)。

关于麻将的规则,小 A 的介绍如下:

  • 一幅麻将手牌胡牌时应当恰有 14 张牌(也就是听牌时恰有 13 张牌),本题中的麻将也不例外;

  • 本题中,麻将共有三种花色,分别是(m)、饼 (p)、索 (s),每种花色共有 9牌(编号为 1~9),每种牌最多 4,例如一万记为 1m、九索记为 9s

  • 一幅麻将胡牌时应当由 4 组面子1 组雀头组成,其中雀头是指两张完全相同的牌(如:22s99m),而面子在本题中一共有顺子与刻子两种,介绍如下:

    1. 顺子是指数字大小连续的三张同花色的牌,例如:123s789p456m;但形如 135m159p891s 的三张牌则不构成顺子;

    2. 刻子是指三张完全相同的牌,如:333m777s444p;但形如 445s 的三张牌则不构成刻子。

  • 当听牌在手牌中已经出现 4 张时,由于没有第 5 张牌可以胡,不认为这张牌是所听的牌。

小模拟麻将题

B

n 个点,第 i 个点的坐标为 (x_i,y_i),连接两点 i,j 的代价为 (x_i-x_j)^2+(y_i-y_j)^2,求连同所有点花费的最小代价

1 \leq n \leq 10^5,0 \leq x_i \leq 10^5,0 \leq y_i \leq 10

人类智慧题

发现 0 \leq y_i \leq 10,可以先按 x_i 从小到大排序,然后发动人类智慧,每个点只连它前面的 20 个点,然后跑 Kruskal 或者 Prim 求最小生成树就好了,这里跑了 Kruskal

时间复杂度 \mathcal O(m \log m),其中 m=10n

C

喵喵喵幼儿园有 n 名同学,现在有 n 个礼物要分配给他们, 但是每个同学的喜好不同,具体地,第 i 名同学最喜欢第 p_{i,1} 个礼物,其次喜欢第 p_{i,2} 个礼物……最不喜欢第 p_{i,n} 个礼物,保证 p_i 是一个 1n排列

现在懒惰的老师只给第 i 名同学分配了第 i 个礼物,他们自然希望通过交换来得到自己更喜欢的礼物,也就是说,交换结束之后每个人都不会拿到自己更不喜欢的礼物。

现在你需要帮助同学们完成交换礼物的过程,好奇的他们希望知道有多少种方法可以使得交换之后每个人都不会拿到自己更不喜欢的礼物。

正当你开始准备解决这个问题时,老师告诉你,同学们之间被分为了两个阵营,只有同一个阵营的同学之间才能交换礼物;并且这个阵营情况是会发生变化的,你需要对于 q 种阵营情况分别求出只在同阵营的同学之间交换礼物,且交换之后合法的方案数,由于答案可能很大,所以你不需要取模再输出。

咕咕咕

D

给定有向图 G=(V,E),其中 V 为点集,E 为边集。设 G 包含 n 个结点,用正整数 1,2,\dots,n 表示,即 V=\lbrace 1,2,\dots,n \rbrace

对于 V 的任意非空子集 S \subseteq V,如果 S 中任意点的任意后继均属于 S,即对任意 u \in Su 的出边 (u,v) \in E 均满足 v \in S,则称 SG 的一个闭合子图

你的任务是,求出有多少个 G非空闭合子图 S,满足 S 中的点编号是连续的。连续的定义:对任意整数 i<k<j,若 i,j \in S,则 k \in S

答案对 10^9+7 取模

咕咕咕

Round 6 (9.27)

A

Hikari 和 Karen 正在进行国际象棋决斗,她们不会使得对局出现平局的情况,每场对局都会有一个人胜利。

最初,Hikari 的等级为 R_m,Karen 的等级为 R_h,若此时进行对局,那么 Hikari 获胜的概率为 \frac{R_m}{R_m+R_h},Karen 获胜的概率为 \frac{R_h}{R_m+R_h},胜者等级将 +1,败者等级不变。

请输出她们进行 P+Q 局比赛的情况下,Hikari 恰好获胜 P 局,Karen 恰好获胜 Q 局的概率对 147744151(是个质数)取余后的值,多测。

求概率题,显然答案为:

\frac{(R_m+R_h) \times (R_m+R_h+1) \times \dots \times (R_m+R_h+P+Q-1)}{R_m \times (R_m+1) \times \dots \times (R_m+P-1)} \times {P+Q \choose P}

用快速幂和逆元预处理一下即可,时间复杂度 \mathcal O(T+V),其中 V=(R_m+R_h+P+Q-1)_{\max}

B

树有 n 个节点,边带边权且具有方向,定义两个点之间的距离是两个点间的简单路径边权和。在每个节点上都有一位游客,游客只能沿着边的方向走,将一条边的方向翻转需要花费 1 代价,游客经过一条边花费的时间是边的权。

庆典可以在任意一个节点举办,我们希望所有游客都能够前往庆典所在的节点。所以请你帮他挑选一个节点,使得所有游客都能在 D 的时间内前往庆典所在的节点,并且花费的代价最少。

类似于是换根 dp

先跑两次 dfs 求一下树的直径,先以 1 为根跑一次统计转向边的数量,再跑一次 dfs 换根就贡献即可

时间复杂度 \mathcal O(n),不知道题解在干什么搞倍增带一只 \log

C

Q 次询问,在序列 a 的区间 [l_i,r_i] 中选 k 个数,最大化 \gcd(b_1,b_2,\dots,b_k)

其中,k \geq (r-l+1)-3

咕咕咕

D

在一个一位数轴上,有两个吃豆人,起始位置都在原点。任意时刻它们可以以不超过 V 的速度移动或静止不动

已知第 i 颗豆子在时刻 t_i 出现在位置 x_i,吃豆人能吃掉它当且仅当在时刻 t_i 位置在 x_i

求在吃豆人能吃完所有豆子的前提下,最小化速度上限 V

咕咕咕

Round 7 (9.29)

A

给定一个元素互不相同的序列 A,以及一个整数 k,保证 k \in [0,1] \cap \mathbb N

求有多少种重排 A 的方式满足:

\forall 1 \leq i<j \leq n \text{ 且 } i+j \text{ 为奇数,都有 } A_i+A_j \equiv k \pmod 2

答案对 147744151 取模

结论题,不过一开始没能立刻看出条件其实推下去就是对于 \forall i \in [1,n] 都满足

就跟奇偶性有关

B

给定一个长度为 n 的数组 A,解决该问题前可以任意重排该数组

定义数组的一个区间 [l.r]美丽的当且仅当 \forall l \leq i \leq j \leq r,A_i | A_j \lor A_j | A_i,此时区间 [L,R] 的分数为 \min(A_l,A_{l+1},\dots ,A_r) \times (r-l+1)

最大化 A 数组的美丽区间分数的最大值

较为简单的数论题,从最大值 maxa1 一直枚举,然后进 dfs 剪枝求答案即可

C

A$ 国拥有 $n$ 个城市,有 $m$ 条双向道路,每条道路的通行时间都为 $1

某人想在满足能在不超过 l_1 的时间从 s_1t_1 且能在不超过 l_2 的时间从 s_2t_2 的时间,最大化摧毁道路的数量

咕咕咕

D

开派对咯!有 n 个人,起初他们两两之间的关系度都为 0。在接下来 m 天,每天都会发生一个事件,事件分三种类型:

  • x 个人和第 y 个人的关系度增加了 1

  • x 个人发起了一次聚会,邀请了所有认识 x 的人,每个被邀请的人也会叫上自己认识的人……然后所有参加聚会的人两两之间的关系度都会增加 1

  • 请输出当前第 x 个人和第 y 个人之间的关系度。

定义两个人互相认识当且仅当他们之间的关系度不小于 1

咕咕咕

E

对于一个大小为 n 的序列 A=(A_1,A_2,\dots,A_n) 和两个整数 L,R 满足 1 \leq L \leq R \leq n 和两个整数 S,T 满足 S \neq T

定义:

F^k(i)= \begin{cases} F^{k-1}(F(i)) &\text{if}(k \neq 1) \\ A_i &\text{if}(k=1) \end{cases}

现在有一个 n 个点,0 条边的有向图 G,按照如下规则给这个图添加边:

对于 1 \leq i \leq n,L \leq k \leq R,添加一条 (i,F^k(i)),长度为 1有向边

询问从 S 出发到达 T 的最短距离,若不能到达则输出 -1

咕咕咕