首页 > 其他分享 >Educational Codeforces Round 152 (Rated for Div. 2) 题解

Educational Codeforces Round 152 (Rated for Div. 2) 题解

时间:2023-07-29 18:44:05浏览次数:42  
标签:Educational Rated 题解 复杂度 位置 血量 怪物 答案 染色

\(6\) 题做出来 \(3\) 题,这一次的 D 题没能复刻上一次 Round 888 Div. 3 最后几分钟 AC 的奇迹

A. Morning Sandwich

大水题,5min时间4min都在翻译题面

直接拿 \(b\) 和 \(c+h\) 进行比较分类讨论即可

单次操作时间复杂度 \(O(1)\)

B. Monsters

首先有一个特别显然、复杂度特别高的暴力思路:把所有怪物的血量和标号放到堆里,每次拿出血量最高且标号最小的怪物,血量减去 \(k\),再插回去

但是这样做会有很多次冗余的减法操作,所以来考虑一下所有怪物都被打成了只要一刀就能干掉的情况:显然,这时所有怪物的血量都是原血量对 \(k\) 取模的值

这就好办了,一开始就对所有怪物的血量取模,然后依旧是用大根堆(考试的时候我用的 set)来做,每次取出堆顶并输出(对 \(k\) 取模的值为 \(0\) 的怪物要特判)即可

单次操作时间复杂度 \(O(n\log n)\)

C. Binary String Copying

有一个很显然的暴力(已经尽量优化了):

对于每一组 \((l,r)\),将排序操作后的版本插到 Trie 里面,最后统计叶子结点的个数

这样的单次操作时间复杂度是 \(O(n\times m)\),明显过不了

那么我们考虑一下,对于一组 \((l,r)\),能否求出一组 \((l',r')\) 使得字符串 \(s\) 中对 \(s_l\sim s_r\) 排序和对 \(s_{l'}\sim s_{r'}\) 排序后的结果 相等 呢?

由于 \(s\) 是一个 \(0/1\) 串,这就使得整个问题的讨论简单了许多:显然,若区间 \([l,r]\) 存在 前缀全 \(0\) 串后缀全 \(1\)串,那么 \(l'\) 就是 \(s_l\sim s_r\) 中 第一个出现 \(1\) 的位置,\(r'\) 就是 \(s_l\sim s_r\) 中 最后一个出现 \(0\) 的位置,\([l',r']\) 也就是在保持操作结果不变的情况下的、被包含在 \([l,r]\) 内的最小区间

所以,对于每一组 \((l,r)\),求出 \((l',r')\) 并统计即可

但是,这还不够快,因为一旦每一次操作用枚举的方式计算 \((l',r')\),复杂度依旧是 \(O(n\times m)\),只不过是在常数级别进行优化而已

注意到,如果 \(l\) 不变,那么无论 \(r\) 如何变化,该区间对应的 \(l'\) 也是不变的,反之亦然

所以,我们可以提前预处理对于位置 \(i\),它作为区间左边界和右边界时所对应的 \(l'\) 和 \(r'\),这样每一个数据的复杂度就被优化为 \(O(n+m)\),前一个 \(n\) 为预处理,后一个 \(m\) 对应 \(m\) 次 操作

D. Array Painting

其实思路蛮简单的,但是考场上一直 WA

首先最优的选择方案就是先把序列里所有的 \(2\) 染色,因为 \(2\) 能免费把两侧的位置一起染色(要记得标记出被染的位置),完全不亏

再然后,对于序列中的 \(1\),它们被染色后都只能把两侧其中一侧的位置一起染,所以如果出现极长的一段连续的 \(1\),那么这一段 \(1\) 的染色费用为 \(1\),接着还能顺便把最后一个 \(1\) 右边的位置一起染了(如果是 \(0\),那么现在染完,之后就不用重复染这个 \(0\);如果是 \(2\),现在也不用染,因为之前先给所有 \(2\) 染色了)

最后剩下所有的 \(0\) 单独染色即可

E. Max to the Right of Min

考虑对于每个右端点统计答案

假设当前枚举到 \(r\) ,数组 \(a\) 满足:若区间 \([l, r]\) 满足条件,则 \(a_l=1\),否则 \(a_l=0\)

我们考虑 \(r\) 迭代后对于数组 \(a\) 的影响,显然只有 \(p_{r+1}\) 为当前区间的最大/小值时才会对答案产生影响, 设 \(i\) 前第一个比 \(p_i\) 大的位置为 \(b_i\),第一个比 \(p_i\) 小的位置为 \(c_i\),\(b, c\) 容易单调栈维护求出

  • 若 \(b_{r+1}<r\) (即 \(p_r<p_{r+1}\) ),则 \(p_{r+1}\) 只能当在它为最大值时造成影响,影响为: \(\forall x \in\left[b_i+1, r\right], a_x \leftarrow 1\)
  • 否则 \(p_r>p_{r+1}\),类似的,\(p_{r+1}\) 只能当在它为最小值时造成影响,影响为: \(\forall x \in\left[c_i+\right.1, r], a_x \leftarrow 0\)

然后对 \(a\) 区间更新,对于每一个 \(r\) 求出答案就可以了(每个 \(r\) 的答案就是 \(O(\log n)\) 求出的 \(l\in [1,n]\) 时的答案之和)

总复杂度 \(O(n\log n)\)

F. XOR Partition

题目的大意就是说要把一组整数分成两个集合,使得两个集合各自的 最小异或对的异或值的较小值最大

题目有点绕,但关键点就是把整数分成两个集合,不难看出这是二分图的典型用法

那么,为了让答案尽量大,我们就要让每一次抽取数对后的序列中 新的最小异或对分开

套到二分图上,就是这个异或对的两个数字在二分图上连一条边,等到整个图连通以后就可以计算答案了

也就是说,我们可以假设:对于边 \((a_i,a_j)\),其边权为 \(a_i\oplus a_j\),那么答案就是在这张图上跑一遍最小生成树后的结果

标签:Educational,Rated,题解,复杂度,位置,血量,怪物,答案,染色
From: https://www.cnblogs.com/cantorsort2919/p/17590280.html

相关文章

  • luogu P4069 [SDOI2016] 游戏 题解【李超树+树剖】
    目录题目描述解题思路code题目描述P4069[SDOI2016]游戏一棵树,树上有\(n\)个节点,最初每个节点上有\(1\)个数字:\(123456789123456789\)。有两种操作:\(\centerdot\)选择\(s,t\)两个节点,将路径上的每一个点都变多(\(1\)个变\(2\)个)数字:\(a\timesdis+b\),其中\(dis\)表示该节点......
  • P3979 遥远的国度 题解
    P3979遥远的国度题意一棵树,\(n\le10^5\),三个操作,\(m\le10^5\),点带权。换根路径推平子树查最小值思路如果没有换根,操作2,3是裸的树剖,考虑换根后的询问如何处理。显然不能再做一遍树剖,只能假装我们换根了,询问可以分成四种情况,令原根为\(root\),新根为\(id\),查询点......
  • luogu P3733 [HAOI2017] 八纵八横 题解【线段树分治+线性基+可撤销并查集+bitset】
    目录题目大意解题思路code题目大意题目链接给出一张\(n\)个点\(m\)条边的连通无向图,边带边权\(w_i\)。有以下三种操作,共\(q\)次:\(\centerdot\)在点\(x,y\)之间加入一条边权为\(w_i\)的边,如果这是第\(i\)个此种操作,则记这条新边为第\(i\)条。\(\centerdot\)将第\(k......
  • P9459 浴眼盯真 题解
    由于我不会使用正则表达式,所以我只能使用基础Python语法QwQ。[input().split()for_inrange(int(input()))]是个列表生成器,效果是产生一个长度为\(T\)的列表,列表的元素是以每一行以空格为分割符的字符串列表。for(a,b,c,d)in[]可以用\(a,b,c,d\)来复制列表中每个元素......
  • P9451 [ZSHOI-R1] 新概念报数 题解
    满足\(\operatorname{popcount}(x)<3\)的数实际上很少,直接把所有这些数扔到set里面,询问就返回set中\(x\)的下一个元素即可。记得开longlong。set内的元素数量是\(\log^2w\),所以复杂度是\(\mathcalO(\log^2w\log\log^2w+T\log\log^2w)=\mathcalO(\log^2w\log\logw......
  • 【题解】Luogu[P4711] 「化学」相对分子质量
    Link一道简单的模拟题,评绿可能有点高了。因为没有括号嵌套,难度瞬间降了一个档次,我们直接对着化学式扫一遍即可。若扫到左括号,说明接下来都是在括号内的,我们标记一下。若扫到大写字母,说明出现了一个新的元素,那么我们就看后面是否有下标,若有则类似于快读的方式直接处理后面的数......
  • [USACO13DEC] The Bessie Shuffle S 洗牌 题解
    提供一种思路,可以做到\(O(n)\)。目前是全OJ最优解,跑到了79ms。update2023.07.29完工,期望无bug(暑假快乐吖o( ̄▽ ̄)ブ)update2023.07.27(要原题检测了,先占个坑,有时间再补)原题大意P3095[USACO13DEC]TheBessieShuffleS有\(n\)张牌,每次取出\(m\;(m<n)\)张牌进行置换操作。操......
  • stm32cubeide ioc报错 This IOC file has been generated with CubeMX version 5.6.1
    STM32Cubemx文件的版本不一致导致打不开.ioc文件的问题问题:ThisIOCfilehasbeengeneratedwithCubeMXversion5.6.1YourcurrentCubeMXversionis5.0.0PleaseupdatetoanewestCubeMXversiontobeabletoopenthisIOC.笔者遇到这个问题后,就开始升级程序,但是升级......
  • CF858C 题解
    洛谷链接&CF链接本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读。题目简述给你一个均为小写字母的字符串,如果它的子串同时满足:三个连着的辅音字母。这一段连着的辅音字母不是全部一样的。就认为它不合法。现在要求用最少的空格隔开这个字符串,使得它变成......
  • AT_agc022_a 题解
    洛谷链接&Atcoder链接本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读。题目简述给定字符串\(S\),仅包含互不相同的小写字母,你需要找到仅包含互不相同的小写字母的字符串中,第一个字典序比它大的字符串,如果找不到输出\(-1\)。(\(|S|\le26\))思路这篇题解......