(FJWC2020)DTOJ 4680. 红黑兔

2024-03-08 23:32
文章标签 4680 红黑 dtoj fjwc2020

本文主要是介绍(FJWC2020)DTOJ 4680. 红黑兔,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意

上个月,PinkRabbit 在算法竞赛网站 Codeforces 一把打上了 ILGM。

PinkRabbit 现在看到了一道简单题,但他忙于水知乎夺取 Codeforces 世界榜首,于是把问题交
给了你:

给定一个长度为 n n n 的只包含小写英文字母的字符串 s s s,你需要找到一个最大的 k k k ,使得存在:
1 ≤ l 1 ≤ r 1 < l 2 ≤ r 2 < l 3 ≤ r 3 < ⋯ < l k ≤ r k ≤ n 1 \le l_1 \le r_1 < l_2 \le r_2 < l_3 \le r_3 < \cdots <l_k \le r_k \le n 1l1r1<l2r2<l3r3<<lkrkn

(即 k k k 个区间 [ l 1 , r 1 ] [ l 2 , r 2 ] ⋯ [ l k , r k ] [l_1,r_1][l_2,r_2] \cdots [l_k,r_k] [l1,r1][l2,r2][lk,rk] 的左右端点都递增且两两不相交)

使得对于每个 1 ≤ i < k 1 \le i <k 1i<k ,都满足 s [ l i + 1 ⋯ r i + 1 ] s[l_{i+1} \cdots r_{i+1}] s[li+1ri+1] s [ l i ⋯ r i ] s[l_{i} \cdots r_{i}] s[liri] 的严格子串。

其中 s [ l ⋯ r ] s[l \cdots r] s[lr] 表示字符串 s s s 的第 l l l 到第 r r r 个字符组成的字符串。

字符串 A A A 是字符串 B B B 的严格子串,当且仅当从 B B B 的开头和结尾各删掉若干个字符(从开头和结尾
删掉的字符个数都可以是零个,但删掉的字符个数之和必须大于 0 0 0)能够得到 A A A

子任务1 (10 分): n ≤ 100 n \le 100 n100

子任务2 (15 分): n ≤ 1000 n \le 1000 n1000

子任务3 (25 分): n ≤ 3 × 1 0 4 n \le 3 \times 10^4 n3×104

子任务4 (30 分): n ≤ 1 0 5 n \le 10^5 n105

子任务5 (20 分):无特殊限制。

对于所有的数据,有 1 ≤ n ≤ 5 ∗ 1 0 5 1 \le n \le 5*10^5 1n5105 ,字符串仅包含小写英文字母。

题解

考虑暴力,从后往前,记 f [ i ] [ j ] f[i][j] f[i][j]为最后一段为 [ i , j ] [i,j] [i,j]的最大答案,转移时枚举下一个和它相同的串,显然只拓展一位是最优的,效率 O ( n 3 ) O(n^3) O(n3)。(考场做法,竟然过了 n = 1000 n=1000 n=1000的点)。
考虑优化,改为被动转移,将可以转移过来的值记在哈希表上即可做到 O ( n 2 ) O(n^2) O(n2)(然而不能多得分) 。其实注意到既然最优答案的每个串长度依次是 1 , 2 , . . . , k 1,2,...,k 1,2,...,k的(所以最后一个串长=答案),这样串的长度不会超过 n \sqrt{n} n ,效率可以优化为 O ( n n ) O(n\sqrt{n}) O(nn )(正解和这个并没有关系) 。考场上这两者都没想到很不应该。
发现瓶颈在于状态数,考虑是否需要那么多状态。对于一个结尾,它的最大答案是单调的:即如果可以为 x x x,则一定也可以比 x x x小(每个串都去掉开头或都去掉结尾即可少1)。利用这个优化状态:记 f [ i ] f[i] f[i]为以 i i i为结尾的最大答案,转移时,直接二分 f [ i ] f[i] f[i]判断是否合法,则合法的转移点 j j j应满足:
1. j > i + f [ i ] j>i+f[i] j>i+f[i]
2. f [ j ] ≥ f [ i ] − 1 f[j]\ge f[i]-1 f[j]f[i]1
3. f [ i ] ≤ l c p ( i , j ) f[i]\le lcp(i,j) f[i]lcp(i,j) f [ i ] ≤ l c p ( i + 1 , j ) f[i]\le lcp(i+1,j) f[i]lcp(i+1,j)
用主席树+SA可以维护,效率为 O ( n l o g 2 n ) O(nlog^2n) O(nlog2n)
考虑利用单调性来避免二分:类似 f [ i ] f[i] f[i]的单调性,可猜想并证明 f [ i ] ≤ f [ i + 1 ] + 1 f[i]\le f[i+1]+1 f[i]f[i+1]+1,于是直接推指针即可,效率 O ( n l o g n ) O(nlogn) O(nlogn)

这篇关于(FJWC2020)DTOJ 4680. 红黑兔的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/788777

相关文章

从2-3-4树开始理解红黑二叉树(JAVA代码手撸版)

经典的红黑二叉树在新增/删除数据时维持自平衡始终对应着一个2-3-4 树。本文只关注2-3-4 对应的经典红黑二叉树。 暂时不考虑 2-3 树对应的左倾红黑二叉树。 背景知识 2-3-4 树简介 一棵 2-3-4 树的结点分为 内部结点 (internal nodes) 和 叶子结点 (leaf nodes) ,定义如下。 内部结点: 2-结点: 拥有1个数据项x,2个子结点。

中国热门高端dating约会交友软件有哪些?国内权威Dating App红黑排行榜推荐

在dating 软件刷了无数个男人后终于脱单啦,跟大家分享一些我的个人感受 1、二狗 颜值⭐️⭐️⭐️ 真实性 ⭐️⭐️⭐️⭐️⭐️ 用户质量⭐️⭐️⭐️⭐️ ⭕️优点:整体用户质量较高,用户集中在金融、互联网和体制内行业。用户需进行学历、工作和身份验证,真实性高。 ⭕️缺点:每日心动机会较少,用户数量较少。 2、青藤 颜值⭐️⭐️ 真实性⭐️⭐️⭐️⭐️⭐️ 用户质量⭐️⭐️⭐️ ⭕

蓝绿发布,红黑发布和灰度发布是什么

各种部署方式的定义 我们先来看看蓝绿部署(Blue-green Deployment)、红黑部署(Red-black Deployment)和灰度发布(Gray Release ,或 Dark Launch)的定义和流程吧。 蓝绿部署 蓝绿部署,是采用两个分开的集群对软件版本进行升级的一种方式。它的部署模型中包括一个蓝色集群 A 和一个绿色集群 B,在没有新版本上线的情况下,两个集群上运行的

DTOJ 2937. Sum of LCM

题意: 对于 A 1 , A 2 , … , A N A_1, A_2, \ldots, A_N A1​,A2​,…,AN​ ,求 ∑ i = 1 N ∑ j = 1 N l c m ( A i , A j ) \sum_{i = 1}^N \sum_{j = 1}^N \mathrm{lcm}(A_i, A_j) ∑i=1N​∑j=1N​lcm(Ai​,Aj​) 的值。 l c m ( a

DTOJ#4170. 「PKUWC2018」猎人杀

题意: 猎人杀是一款风靡一时的游戏“狼人杀”的民间版本,他的规则是这样的: 一开始有 n n n 个猎人,第 i i i 个猎人有仇恨度 w i w_i wi​ ,每个猎人只有一个固定的技能:死亡后必须开一枪,且被射中的人也会死亡。 然而向谁开枪也是有讲究的,假设当前还活着的猎人有 [ i 1 … i m ] [i_1\ldots i_m] [i1​…im​],那么有 w i k

DTOJ #4235. 交朋友

题意: 给定一个n个点m条边的有向图,对于同一个点连向的两个点可以互相连双向边,求图中最多有几条边。 题解: 直观地想,首先对于每一个点,若它的出度大于1,则它连向的边为一个完全图,但每个点做完后又会产生影响,因此没法保证效率。 发现“对于同一个点连向的两个点可以互相连双向边”这个条件类似于并查集,即把双向边视为无向边,这样恰好满足了并查集的性质。 因为原始的边不在并查集的考虑范围内,故用原始的边

(CSP2019模拟)DTOJ 4644. speike

题意 众所周知,Speike 狗是一条特别喜欢追着Tom 打的狗。 现在,Tom 又把Speike 惹生气了,现在Speike 需要跨越千山万水找Tom 报仇。 Speike 所在的世界可以看成是一个无穷大的平面,平面由一个平面直角坐标系确定。在平面上有许多不相交的矩形障碍,矩形的四边平行于坐标轴。 Speike 需要从 ( 0 , 0 ) (0,0) (0,0) 出发,在尽量短的时间内

DTOJ 4538. 「TJOI / HEOI2016」排序

题意 在 2016 年,佳媛姐姐喜欢上了数字序列。因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他。 这个难题是这样子的:给出一个 $1 $ 到 n n n 的全排列,现在对这个全排列序列进行 m m m 次局部排序,排序分为两种: ( 0 , l , r ) (0, l, r) (0,l,r) 表示将区间 [ l , r ] [l, r] [l,r]

(CSP2019模拟)DTOJ 4629. 世界

题意 有一个虚无的结界,隔开了两个世界。 人们在结界内游荡,而远方的星辰在结界外。 我们可以把结界看作 x x x 轴,那么人们都在 x x x 轴下方,而星星都在 x x x 轴上方。 人们本应该能看到所有的星星,但是结界外( x x x 轴上方)出现了几座墙,挡住了人们的视线。墙是平行于 x x x 轴的。 现在想问,每个人分别能看到多少星星。 测试点编号 n n n m

(CSP2019模拟)DTOJ 4632. 隐蔽的居所

题意 在小G的家乡,有很多人住在一个大湖的边上。 他告诉小D,这个大湖可以被视作一个圆。一共有 N N N 户人家, 他们住在这个圆的 N N N 等分点上,每个 N N N 等分点上恰好有一户人家. 这里的每户人家都有不同的信仰,其中第 i i i 户人家信仰第 i i i 种宗教。很显然,宗教对于生活会产生一定的影响,具体来说,相邻两户人家信仰的宗教的编号之差的绝对值不可以超过